From 5919dd2bca2d975075bd3fd530bf724639d74053 Mon Sep 17 00:00:00 2001
From: stefan <stefan@eb2d0018-73a3-4aeb-bfe9-1def61c9ec69>
Date: Fri, 26 Sep 2008 13:18:32 +0000
Subject: [PATCH] + MultipleSearch GetLatestVimScripts + wget.exe

git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@170 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
---
 vimfiles.stefan/plugin/vimsuite.vim        |     2 +-
 vimfiles.stefan/tools/wget.exe             |   Bin 0 -> 258048 bytes
 vimfiles/GetLatest/GetLatestVimScripts.dat |    11 +-
 vimfiles/autoload/MultipleSearch.vim       |   343 +
 vimfiles/autoload/netrw.vim                | 15053 ++++++++++---------
 vimfiles/autoload/netrwSettings.vim        |   411 +-
 vimfiles/autoload/tcomment.vim             |   557 +
 vimfiles/autoload/vimball.vim              |   141 +-
 vimfiles/doc/MultipleSearch.txt            |   106 +
 vimfiles/doc/pi_netrw.txt                  |  6096 ++++----
 vimfiles/doc/pi_vimball.txt                |    63 +-
 vimfiles/doc/tComment.txt                  |     2 +-
 vimfiles/doc/tags                          |    29 +-
 vimfiles/plugin/MultipleSearch.vim         |    51 +
 vimfiles/plugin/matrix.vim                 |    22 +-
 vimfiles/plugin/netrwPlugin.vim            |    44 +-
 vimfiles/plugin/tComment.vim               |   713 +-
 vimfiles/plugin/vimballPlugin.vim          |     4 +-
 vimfiles/syntax/netrw.vim                  |   207 +-
 19 files changed, 12714 insertions(+), 11141 deletions(-)
 create mode 100644 vimfiles.stefan/tools/wget.exe
 create mode 100644 vimfiles/autoload/MultipleSearch.vim
 create mode 100644 vimfiles/autoload/tcomment.vim
 create mode 100644 vimfiles/doc/MultipleSearch.txt
 create mode 100644 vimfiles/plugin/MultipleSearch.vim

diff --git a/vimfiles.stefan/plugin/vimsuite.vim b/vimfiles.stefan/plugin/vimsuite.vim
index f05bf2e..4853bdf 100644
--- a/vimfiles.stefan/plugin/vimsuite.vim
+++ b/vimfiles.stefan/plugin/vimsuite.vim
@@ -885,7 +885,7 @@ function s:GetLatestVimScriptsThroughProxy()
     " reset HOME
     let $HOME = home
 endfunction
-let g:GetLatestVimScripts_wget= "c:/tools/wget/wget.exe"
+let g:GetLatestVimScripts_wget= expand(g:vimfiles . '/tools/wget.exe')
 let g:GetLatestVimScripts_mv= "move"
 
 " merge
diff --git a/vimfiles.stefan/tools/wget.exe b/vimfiles.stefan/tools/wget.exe
new file mode 100644
index 0000000000000000000000000000000000000000..53971ad91f5254f5507f50f8bf275f16b3fec356
GIT binary patch
literal 258048
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
QhQMeDjE2By2#^~B0I6VE1ONa4

literal 0
HcmV?d00001

diff --git a/vimfiles/GetLatest/GetLatestVimScripts.dat b/vimfiles/GetLatest/GetLatestVimScripts.dat
index 53b617c..3813b12 100644
--- a/vimfiles/GetLatest/GetLatestVimScripts.dat
+++ b/vimfiles/GetLatest/GetLatestVimScripts.dat
@@ -1,7 +1,7 @@
 ScriptID SourceID Filename
 --------------------------
-1075 8501 netrw.vim
-1502 8515 vimball.vim
+1075 9221 netrw.vim
+1502 8743 vimball.vim
 1008 3118 srec.vim (ftplugin)
 1009 3119 srec.vim (syntax file)
 475  2535 latex-suite (install in vimfiles.latex)
@@ -10,8 +10,8 @@ ScriptID SourceID Filename
 862  2635 cscope_quickfix.vim
 51    171 cscope_macros.vim
 102  5306 DirDiff.vim
-1189 6533 matrix.vim
-1173 7588 tcomment
+1189 8687 matrix.vim
+1173 8689 tcomment
 948  2878 Scons Compiler plugin
 1709 6421 Scons Syntax file
 1772 7248 DAMOS.zip DAMOS tools (von Stefan)
@@ -28,6 +28,7 @@ ScriptID SourceID Filename
 2092 8095 reloaded.vim (matrix colorscheme)
 848  8203 SrchRplcHiGrp.vim (Search/Replace on Syntax Group)
 294  8407 Align.vim
-642  8136 getscript.vim
+479 9276 MultipleSearch
 642  8136 :AutoInstall: GetLatestVimScripts.vim
 1066 7618 :AutoInstall: cecutil.vim
+642 8136 :AutoInstall: getscript.vim
diff --git a/vimfiles/autoload/MultipleSearch.vim b/vimfiles/autoload/MultipleSearch.vim
new file mode 100644
index 0000000..a258748
--- /dev/null
+++ b/vimfiles/autoload/MultipleSearch.vim
@@ -0,0 +1,343 @@
+" File:		MultipleSearch.vim (global plugin)
+" Last Changed: 13 Aug 2008
+" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
+" Version:	1.3
+" License:      Vim License
+
+"-----------------------------------------------------------------------------
+" MultipleSearch allows you to have the results of multiple searches displayed
+" on the screen at the same time.  Each search highlights its results in a
+" different color, and all searches are displayed at once.  After the maximum
+" number of colors is used, the script starts over with the first color.
+" 
+" The command syntax is: 
+" :Search <pattern1> 
+" which will highlight all occurrences of <pattern1> in the current buffer.  A
+" subsequent :Search <pattern2> will highlight all occurrences of <pattern2>
+" in the current buffer, retaining the highlighting of <pattern1> as well.
+" <pattern1> and <pattern2> are any search pattern like you would use in a
+" normal /<pattern> search.
+"
+" The :Search command honors Vim's 'ignorecase' and 'smartcase' settings for
+" its own search.  You can use the \c and \C flags in the search pattern to
+" force case matching no matter the setting of 'ignorecase' and 'smartcase'.
+"
+" The :SearchBuffers command works just like :Search, but the search occurs in
+" all currently listed buffers (i.e., those that appear in the output of :ls).
+" The match in all buffers will have the same color.  This is different than 
+" :bufdo Search <pattern> because in that case, each buffer will highlight the
+" match in a different color.
+" 
+" To clear the highlighting, issue the command :SearchReset (for the current
+" buffer) or :SearchBuffersReset (for all buffers).
+" 
+" You can specify the maximum number of different colors to use by setting the
+" g:MultipleSearchMaxColors variable in your .vimrc.  The default setting is
+" four, but the script should handle as much as your terminal / GUI can
+" display.  The g:MultipleSearchColorSequence variable lets you list the
+" colors you want displayed, and in what order.  To make the text more
+" readable, you can set the g:MultipleSearchTextColorSequence variable to a
+" list of colors for the text, each position corresponding to the color in the
+" same position in g:MultipleSearchColorSequence.
+
+" If you change one of the preference variables, you can issue the command
+" :SearchReinit
+" to update the script with your new selections.
+
+" Supporters:
+" Thanks to Peter Valach for suggestions and testing!
+" Thanks to Jeff Mei for the suggestion and testing of the :SearchBuffers
+" command.
+" Thanks to Amber Hassan for fixing a problem with a search pattern containing
+" quote characters!
+" Thanks to Manuel Picaza for the mapping to :Search the word under the
+" cursor.
+" ----------------------------------------------------------------------------
+
+" This script uses continuation lines, so make sure it runs using
+" Vim-default 'cpoptions'.
+let s:save_cpo = &cpo
+set cpo&vim
+
+" FUNCTIONS
+" --------------------------------------------------
+
+" -----
+" Strntok: Utility function to implement C-like strntok() by Michael Geddes
+" and Benji Fisher at http://groups.yahoo.com/group/vimdev/message/26788
+" -----
+function! s:Strntok( s, tok, n)
+    return matchstr( a:s.a:tok[0], '\v(\zs([^'.a:tok.']*)\ze['.a:tok.']){'.a:n.'}')
+endfun
+
+" -----
+" MultipleSearchInit: Initialize the higlight groups.  This function will add
+" highlighting groups if g:MultipSearchMaxColors has increased since the
+" plugin was first loaded.
+" -----
+function! s:MultipleSearchInit()
+    " Specify a maximum number of colors to use. 
+    if exists('g:MultipleSearchMaxColors')
+        let s:MaxColors = g:MultipleSearchMaxColors
+    else
+        let s:MaxColors = 4
+    endif
+
+    " Define the sequence of colors to use for searches.
+    if exists('g:MultipleSearchColorSequence')
+        let s:ColorSequence = g:MultipleSearchColorSequence
+    else
+        let s:ColorSequence = "red,yellow,blue,green,magenta,cyan,gray,brown"
+    endif
+
+    " Define the text color for searches, so that it can still be read against the
+    " colored background.
+    if exists('g:MultipleSearchTextColorSequence')
+        let s:TextColorSequence = g:MultipleSearchTextColorSequence
+    else
+        let s:TextColorSequence = "white,black,white,black,white,black,black,white"
+    endif
+
+    " Start off with the first color
+    let s:colorToUse = 0
+
+    let s:colorsInUse = 0
+
+    " Sanity check: make sure MaxColors is not larger than the number of
+    " colors in ColorSequence or the corresponding TextColorSequence.
+    let s:MaxColors = s:Min(s:MaxColors, s:ItemCount(s:ColorSequence . ','),
+                \     s:ItemCount(s:TextColorSequence . ','))
+
+    let loopCount = 0
+    while loopCount < s:MaxColors
+        " Define the colors to use
+	let bgColor = s:Strntok(s:ColorSequence, ',', loopCount + 1)
+	let fgColor = s:Strntok(s:TextColorSequence, ',', loopCount + 1)
+        execute 'highlight MultipleSearch' . loopCount
+           \ . ' ctermbg=' . bgColor . ' guibg=' . bgColor
+           \ . ' ctermfg=' . fgColor . ' guifg=' . fgColor
+        let loopCount = loopCount + 1
+    endwhile
+endfunction
+
+" -----
+" ItemCount: Returns the number of items in the given string.
+" -----
+function! s:ItemCount(string)
+    let itemCount = 0
+    let newstring = a:string
+    let pos = stridx(newstring, ',')
+    while pos > -1
+        let itemCount = itemCount + 1
+        let newstring = strpart(newstring, pos + 1)
+        let pos = stridx(newstring, ',')
+    endwhile
+    return itemCount
+endfunction
+
+" -----
+" Min: Returns the minimum of the given parameters.
+" -----
+function! s:Min(...)
+    let min = a:1
+    let index = 2
+    while index <= a:0
+        execute "if min > a:" . index . " | let min = a:" . index . " | endif"
+        let index = index + 1
+    endwhile
+    return min
+endfunction
+
+" -----
+" GetNextSequenceNumber: Determine the next Search color to use.
+" -----
+function! s:GetNextSequenceNumber()
+    let sequenceNumber = s:colorToUse % s:MaxColors
+    let s:colorToUse = s:colorToUse + 1
+    if s:colorToUse >= s:MaxColors
+        let s:colorToUse = 0
+    endif
+    return sequenceNumber
+endfunction
+
+" -----
+" DoSearch: The main searching function that highlights all matches in the
+" current buffer.
+" -----
+function! s:DoSearch(useSearch, forwhat)
+    " Clear the previous highlighting for this color
+    execute 'silent syntax clear ' . a:useSearch
+
+    " Should it be a case-sensitive match or case-insensitive?
+    if &ignorecase == 1  
+        " If 'smartcase' is on and our search pattern has an upper-case
+        " character, do a case sensitive match.
+        if &smartcase == 1
+            " match() respects 'ignorecase', so turn it off for now
+            set noignorecase
+
+            if match(a:forwhat, '\u') > -1
+                syntax case match
+            else
+                syntax case ignore
+            endif
+
+            " Be sure to turn 'ignorecase' back on!
+            set ignorecase
+        else
+            syntax case ignore
+        endif
+    else
+        syntax case match
+    endif
+
+    " Highlight the new search
+    execute 'syntax match ' . a:useSearch . ' "' . a:forwhat . '" containedin=ALL'
+    let @/ = a:forwhat
+endfunction
+
+" -----
+" MultipleSearch: Highlight the given pattern in the next available color.
+" Vim versions prior to 7.0 don't support the autoload mechanism, so define
+" the main function without the autoload prefix.
+" -----
+if v:version < 700
+    function! MultipleSearch(allBuffers, forwhat)
+        call s:MultipleSearchCommon(a:allBuffers, a:forwhat)
+    endfunction
+else
+    function! MultipleSearch#MultipleSearch(allBuffers, forwhat)
+        call s:MultipleSearchCommon(a:allBuffers, a:forwhat)
+    endfunction
+endif
+
+" -----
+" MultipleSearchCommon: Highlight the given pattern in the next available color.
+" -----
+function! s:MultipleSearchCommon(allBuffers, forwhat)
+    let patt = a:forwhat
+
+    if( l:patt =~ "[^\\\\]'" ) " if single quote not escaped
+        let l:patt = escape(l:patt,"'") " escape single quotes with a \ char
+    endif
+
+    if( l:patt =~ '[^\\]"' ) " if double quote not escaped
+        let l:patt = escape(l:patt, '"') " escape double quotes with a \ char
+    endif
+
+    "let patt = escape(a:forwhat,"'") " escape single quotes with a \ char
+    "let l:patt = escape(l:patt, '"') " escape double quotes with a \ char
+
+    " Determine which search color to use.
+    let s:curr_sequence = s:GetNextSequenceNumber()
+    let s:patterns{s:curr_sequence} = l:patt
+    let s:searchSequence = s:curr_sequence
+    if s:colorsInUse < s:MaxColors
+        let s:colorsInUse += 1
+    endif
+    let useSearch = "MultipleSearch" . s:curr_sequence
+
+    if a:allBuffers
+	" If a:allBuffers is on, we want to show the match in all currently
+	" listed buffers.
+	let counter = 1
+	let bufCount = bufnr("$")
+	let current = bufnr("%")
+	let lz_save = &lazyredraw
+
+	" Loop through all the buffers and perform the search in each one.
+	while counter <= bufCount
+	    if buflisted(counter)
+		exec "buffer " . counter
+                call s:DoSearch(useSearch, l:patt)
+	    endif
+	    let counter = counter + 1
+	endwhile
+	exec "buffer " . current
+	let &lazyredraw = lz_save
+    else
+	" Otherwise, just search in the current buffer.
+        call s:DoSearch(useSearch, l:patt)
+    endif
+endfunction
+
+" ---
+" DoReset: Clear the highlighting
+" ---
+function! s:DoReset()
+    let seq = 0
+    while seq < s:MaxColors
+	execute 'syntax clear MultipleSearch' . seq
+	let seq = seq + 1
+    endwhile
+endfunction
+
+" -----
+" MultipleSearchReset: Clear all the current search selections.
+" -----
+function! s:MultipleSearchReset(allBuffers)
+    let s:colorToUse = 0
+    let s:colorsInUse = 0
+    if a:allBuffers == 1
+	" If a:allBuffers is on, we want to clear the match in all
+	" currently listed buffers.
+	let current = bufnr("%")
+	bufdo call s:DoReset()
+	execute "buffer " . current
+    else
+	" Otherwise, just clear the current buffer.
+	call s:DoReset()
+    endif
+endfunction
+
+" -----
+" SearchNext: Switch to the next search item to cycle through with n and N
+" -----
+function! s:SearchNext(direction)
+    if a:direction == 0
+        let s:searchSequence += 1
+        if s:searchSequence >= s:colorsInUse
+            let s:searchSequence = 0
+        endif
+    else
+        let s:searchSequence -= 1
+        if s:searchSequence < 0
+            let s:searchSequence = s:colorsInUse - 1
+        endif
+    endif
+
+    let @/ = s:patterns{s:searchSequence}
+    call search(s:patterns{s:searchSequence})
+endfunction
+
+
+" Initialize the script the first time through.
+call <SID>MultipleSearchInit()
+
+let &cpo = s:save_cpo
+
+" COMMANDS
+" ------------------------------------------------
+
+" Clear the current search selections and start over with the first color in
+" the sequence.
+if !(exists(":SearchReset") == 2)
+    command -nargs=0 SearchReset :silent call <SID>MultipleSearchReset(0) 
+endif
+
+" Clear the current search selections and start over with the first color in
+" the sequence.
+if !(exists(":SearchBuffersReset") == 2)
+    command -nargs=0 SearchBuffersReset :silent call <SID>MultipleSearchReset(1) 
+endif
+
+" Reinitialize the script after changing one of the global preferences.
+if !(exists(":SearchReinit") == 2)
+    command -nargs=0 SearchReinit :silent call <SID>MultipleSearchInit() 
+endif
+
+" Set the current search pattern to the next one in the list
+nnoremap <silent> <Leader>n :call <SID>SearchNext(0)<CR>
+"
+" Set the current search pattern to the previous one in the list
+nnoremap <silent> <Leader>N :call <SID>SearchNext(1)<CR>
diff --git a/vimfiles/autoload/netrw.vim b/vimfiles/autoload/netrw.vim
index f17adf7..1f7ef38 100644
--- a/vimfiles/autoload/netrw.vim
+++ b/vimfiles/autoload/netrw.vim
@@ -1,7214 +1,7839 @@
-" netrw.vim: Handles file transfer and remote directory listing across
-"            AUTOLOAD SECTION
-" Date:		Mar 28, 2008
-" Version:	123
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
-" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{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 come 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.
-"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
-endif
-if !exists("s:NOTE")
- let s:NOTE    = 0
- let s:WARNING = 1
- let s:ERROR   = 2
-endif
-let g:loaded_netrw = "v123"
-if v:version < 700
- call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
- finish
-endif
-let s:keepcpo= &cpo
-setlocal cpo&vim
-"DechoTabOn
-"call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
-
-" ======================
-"  Netrw Variables: {{{1
-" ======================
-
-" ---------------------------------------------------------------------
-"  Netrw Constants: {{{2
-if !exists("g:NETRW_BOOKMARKMAX")
- let g:NETRW_BOOKMARKMAX= 0
-endif
-if !exists("g:NETRW_DIRHIST_CNT")
- let g:NETRW_DIRHIST_CNT= 0
-endif
-if !exists("s:LONGLIST")
- let s:THINLIST = 0
- let s:LONGLIST = 1
- let s:WIDELIST = 2
- let s:TREELIST = 3
- let s:MAXLIST  = 4
-endif
-
-" ---------------------------------------------------------------------
-" Default values for netrw's global protocol variables {{{2
-if !exists("g:netrw_dav_cmd")
-  let g:netrw_dav_cmd	= "cadaver"
-endif
-if !exists("g:netrw_fetch_cmd")
- if executable("fetch")
-  let g:netrw_fetch_cmd	= "fetch -o"
- else
-  let g:netrw_fetch_cmd	= ""
- endif
-endif
-if !exists("g:netrw_ftp_cmd")
-  let g:netrw_ftp_cmd	= "ftp"
-endif
-if !exists("g:netrw_http_cmd")
- if executable("curl")
-  let g:netrw_http_cmd	= "curl -o"
- elseif executable("wget")
-  let g:netrw_http_cmd	= "wget -q -O"
- elseif executable("fetch")
-  let g:netrw_http_cmd	= "fetch -o"
- else
-  let g:netrw_http_cmd	= ""
- endif
-endif
-if !exists("g:netrw_rcp_cmd")
-  let g:netrw_rcp_cmd	= "rcp"
-endif
-if !exists("g:netrw_rsync_cmd")
-  let g:netrw_rsync_cmd	= "rsync"
-endif
-if !exists("g:netrw_scp_cmd")
-  let g:netrw_scp_cmd	= "scp -q"
-endif
-if !exists("g:netrw_sftp_cmd")
-  let g:netrw_sftp_cmd	= "sftp"
-endif
-if !exists("g:netrw_ssh_cmd")
- let g:netrw_ssh_cmd= "ssh"
-endif
-
-if (has("win32") || has("win95") || has("win64") || has("win16"))
-  \ && exists("g:netrw_use_nt_rcp")
-  \ && g:netrw_use_nt_rcp
-  \ && executable( $SystemRoot .'/system32/rcp.exe')
- let s:netrw_has_nt_rcp = 1
- let s:netrw_rcpmode    = '-b'
-else
- let s:netrw_has_nt_rcp = 0
- let s:netrw_rcpmode    = ''
-endif
-
-" ---------------------------------------------------------------------
-" Default values for netrw's global variables {{{2
-" Cygwin Detection ------- {{{3
-if !exists("g:netrw_cygwin")
- if has("win32") || has("win95") || has("win64") || has("win16")
-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
-   let g:netrw_cygwin= 1
-  else
-   let g:netrw_cygwin= 0
-  endif
- else
-  let g:netrw_cygwin= 0
- endif
-endif
-" Default values - a-c ---------- {{{3
-if !exists("g:netrw_alto")
- let g:netrw_alto= &sb
-endif
-if !exists("g:netrw_altv")
- let g:netrw_altv= &spr
-endif
-if !exists("g:netrw_browse_split")
- let g:netrw_browse_split= 0
-endif
-if !exists("g:netrw_chgwin")
- let g:netrw_chgwin    = -1
-endif
-if !exists("g:netrw_compress")
- let g:netrw_compress= "gzip"
-endif
-" Default values - d-f ---------- {{{3
-if !exists("g:NETRW_DIRHIST_CNT")
- let g:NETRW_DIRHIST_CNT= 0
-endif
-if !exists("g:netrw_decompress")
- let g:netrw_decompress= { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
-endif
-if !exists("g:netrw_dirhistmax")
- let g:netrw_dirhistmax= 10
-endif
-if !exists("g:netrw_fastbrowse")
- let g:netrw_fastbrowse= 1
-endif
-if !exists("g:netrw_ftp_browse_reject")
- let g:netrw_ftp_browse_reject='^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$'
-endif
-if !exists("g:netrw_ftp_list_cmd")
- if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
-  let g:netrw_ftp_list_cmd     = "ls -lF"
-  let g:netrw_ftp_timelist_cmd = "ls -tlF"
-  let g:netrw_ftp_sizelist_cmd = "ls -slF"
- else
-  let g:netrw_ftp_list_cmd     = "dir"
-  let g:netrw_ftp_timelist_cmd = "dir"
-  let g:netrw_ftp_sizelist_cmd = "dir"
- endif
-endif
-if !exists("g:netrw_ftpmode")
- let g:netrw_ftpmode= "binary"
-endif
-" Default values - h-lh ---------- {{{3
-if !exists("g:netrw_hide")
- let g:netrw_hide= 1
-endif
-if !exists("g:netrw_ignorenetrc")
- if &shell =~ '\c\<\%(cmd\|4nt\)\.exe$'
-  let g:netrw_ignorenetrc= 1
- else
-  let g:netrw_ignorenetrc= 0
- endif
-endif
-if !exists("g:netrw_keepdir")
- let g:netrw_keepdir= 1
-endif
-if !exists("g:netrw_list_cmd")
- if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
-  " provide a 'pscp' listing command
-  if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk")
-   let g:netrw_scp_cmd ="pscp -i C:\\private.ppk"
-  endif
-  let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:"
- elseif executable(g:netrw_ssh_cmd)
-  " provide a default listing command
-  let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa"
- else
-"  call Decho(g:netrw_ssh_cmd." is not executable")
-  let g:netrw_list_cmd= ""
- endif
-endif
-if !exists("g:netrw_list_hide")
- let g:netrw_list_hide= ""
-endif
-" Default values - lh-lz ---------- {{{3
-if !exists("g:netrw_localcopycmd")
- if has("win32") || has("win95") || has("win64") || has("win16")
-  if g:netrw_cygwin
-   let g:netrw_localcopycmd= "cp"
-  else
-   let g:netrw_localcopycmd= "copy"
-  endif
- elseif has("unix") || has("macunix")
-  let g:netrw_localcopycmd= "cp"
- else
-  let g:netrw_localcopycmd= ""
- endif
-endif
-if !exists("g:netrw_local_mkdir")
- let g:netrw_local_mkdir= "mkdir"
-endif
-if !exists("g:netrw_localmovecmd")
- if has("win32") || has("win95") || has("win64") || has("win16")
-  if g:netrw_cygwin
-   let g:netrw_localmovecmd= "mv"
-  else
-   let g:netrw_localmovecmd= "move"
-  endif
- elseif has("unix") || has("macunix")
-  let g:netrw_localmovecmd= "mv"
- else
-  let g:netrw_localmovecmd= ""
- endif
-endif
-if !exists("g:netrw_local_rmdir")
- let g:netrw_local_rmdir= "rmdir"
-endif
-if !exists("g:netrw_liststyle")
- let g:netrw_liststyle= s:THINLIST
-endif
-if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
- " sanity check
- let g:netrw_liststyle= s:THINLIST
-endif
-if g:netrw_liststyle == s:LONGLIST && g:netrw_scp_cmd !~ '^pscp'
- let g:netrw_list_cmd= g:netrw_list_cmd." -l"
-endif
-" Default values - m-r ---------- {{{3
-if !exists("g:netrw_markfileesc")
- let g:netrw_markfileesc= '*./[\~'
-endif
-if !exists("g:netrw_maxfilenamelen")
- let g:netrw_maxfilenamelen= 32
-endif
-if !exists("g:netrw_menu")
- let g:netrw_menu= 1
-endif
-if !exists("g:netrw_mkdir_cmd")
- let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir"
-endif
-if !exists("g:netrw_mousemaps")
- if exists("&mouse") && &mouse =~ '[anh]'
-  let g:netrw_mousemaps= 1
- else
-  let g:netrw_mousemaps= 0
- endif
-endif
-if !exists("g:netrw_retmap")
- let g:netrw_retmap= 0
-endif
-if !exists("g:netrw_preview")
- let g:netrw_preview= 0
-endif
-if !exists("g:netrw_scpport")
- let g:netrw_scpport= "-P"
-endif
-if !exists("g:netrw_sshport")
- let g:netrw_sshport= "-p"
-endif
-if !exists("g:netrw_rename_cmd")
- let g:netrw_rename_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mv"
-endif
-if !exists("g:netrw_rm_cmd")
- let g:netrw_rm_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm"
-endif
-if !exists("g:netrw_rmdir_cmd")
- let g:netrw_rmdir_cmd = g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir"
-endif
-if !exists("g:netrw_rmf_cmd")
- let g:netrw_rmf_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f"
-endif
-" Default values - s ---------- {{{3
-if exists("g:netrw_silent") && g:netrw_silent != 0
- let g:netrw_silentxfer= "silent "
-else
- let g:netrw_silentxfer= ""
-endif
-if !exists("g:netrw_shq")
- if exists("&shq") && &shq != ""
-  let g:netrw_shq= &shq
- elseif exists("&sxq") && &sxq != ""
-  let g:netrw_shq= &sxq
- elseif has("win32") || has("win95") || has("win64") || has("win16")
-  if g:netrw_cygwin
-   let g:netrw_shq= "'"
-  else
-   let g:netrw_shq= '"'
-  endif
- else
-  let g:netrw_shq= "'"
- endif
-" call Decho("g:netrw_shq<".g:netrw_shq.">")
-endif
-if !exists("g:netrw_sort_by")
- " alternatives: date size
- let g:netrw_sort_by= "name"
-endif
-if !exists("g:netrw_sort_direction")
- " alternative: reverse  (z y x ...)
- let g:netrw_sort_direction= "normal"
-endif
-if !exists("g:netrw_sort_sequence")
- let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
-endif
-if !exists("g:netrw_special_syntax")
- let g:netrw_special_syntax= 0
-endif
-if !exists("g:netrw_ssh_browse_reject")
-  let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
-endif
-if !has("patch192")
- if !exists("g:netrw_use_noswf")
-  let g:netrw_use_noswf= 1
- endif
-else
-  let g:netrw_use_noswf= 0
-endif
-" Default values - t-w ---------- {{{3
-if !exists("g:netrw_ctags")
- let g:netrw_ctags= "ctags"
-endif
-if !exists("g:netrw_timefmt")
- let g:netrw_timefmt= "%c"
-endif
-if !exists("g:NetrwTopLvlMenu")
- let g:NetrwTopLvlMenu= "Netrw."
-endif
-if !exists("g:netrw_use_errorwindow")
- let g:netrw_use_errorwindow= 1
-endif
-if !exists("g:netrw_win95ftp")
- let g:netrw_win95ftp= 1
-endif
-if !exists("g:netrw_winsize")
- let g:netrw_winsize= ""
-endif
-" ---------------------------------------------------------------------
-" Default values for netrw's script variables: {{{2
-if !exists("g:netrw_cd_escape")
-  let g:netrw_cd_escape="[]#*$%'\" ?`!&();<>\\"
-endif
-if !exists("g:netrw_fname_escape")
- let g:netrw_fname_escape= ' ?&;%'
-endif
-if !exists("g:netrw_glob_escape")
-  let g:netrw_glob_escape= '[]*?`{~$'
-endif
-if !exists("g:netrw_tmpfile_escape")
- let g:netrw_tmpfile_escape= ' &;'
-endif
-
-" BufEnter event ignored by decho when following variable is true
-"  Has a side effect that doau BufReadPost doesn't work, so
-"  files read by network transfer aren't appropriately highlighted.
-"let g:decho_bufenter = 1	"Decho
-
-" ==============================
-"  Netrw Utility Functions: {{{1
-" ==============================
-
-" ------------------------------------------------------------------------
-" s:NetrwOptionSave: save options and set to "standard" form {{{2
-"  06/08/07 : removed call to NetrwSafeOptions(), either placed
-"             immediately after NetrwOptionSave() calls in NetRead
-"             and NetWrite, or after the s:NetrwEnew() call in
-"             NetrwBrowse.
-"             vt: normally its "w:" or "s:" (a variable type)
-fun! s:NetrwOptionSave(vt)
-"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
-
-"  call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
-  if !exists("{a:vt}netrw_optionsave")
-   let {a:vt}netrw_optionsave= 1
-  else
-"   call Dret("s:NetrwOptionSave : options already saved")
-   return
-  endif
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
-
-  " Save current settings and current directory
-  let s:yykeep          = @@
-  if exists("&l:acd")
-   let {a:vt}netrw_acdkeep  = &l:acd
-  endif
-  let {a:vt}netrw_aikeep    = &l:ai
-  let {a:vt}netrw_awkeep    = &l:aw
-  let {a:vt}netrw_cikeep    = &l:ci
-  let {a:vt}netrw_cinkeep   = &l:cin
-  let {a:vt}netrw_cinokeep  = &l:cino
-  let {a:vt}netrw_comkeep   = &l:com
-  let {a:vt}netrw_cpokeep   = &l:cpo
-  if g:netrw_keepdir
-   let {a:vt}netrw_dirkeep  = getcwd()
-  endif
-  let {a:vt}netrw_fokeep    = &l:fo           " formatoptions
-  let {a:vt}netrw_gdkeep    = &l:gd           " gdefault
-  let {a:vt}netrw_hidkeep   = &l:hidden
-  let {a:vt}netrw_magickeep = &l:magic
-  let {a:vt}netrw_repkeep   = &l:report
-  let {a:vt}netrw_spellkeep = &l:spell
-  let {a:vt}netrw_twkeep    = &l:tw           " textwidth
-  let {a:vt}netrw_wigkeep   = &l:wig          " wildignore
-  if has("win32") && !has("win95")
-   let {a:vt}netrw_swfkeep= &l:swf            " swapfile
-  endif
-  if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif
-  silent! let {a:vt}netrw_regslash= @/
-
-"  call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%"))
-endfun
-
-" ------------------------------------------------------------------------
-" s:NetrwOptionRestore: restore options {{{2
-fun! s:NetrwOptionRestore(vt)
-"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%"))
-  if !exists("{a:vt}netrw_optionsave")
-"   call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"   call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
-   return
-  endif
-  unlet {a:vt}netrw_optionsave
-
-  if exists("&acd")
-   if exists("{a:vt}netrw_acdkeep")
-"    call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-    let curdir = getcwd()
-    let &l:acd = {a:vt}netrw_acdkeep
-    unlet {a:vt}netrw_acdkeep
-    if &l:acd
-"     call Decho("exe cd ".escape(curdir,g:netrw_cd_escape))  " NOTE: was g:netrw_fname_escape for some reason
-     exe "lcd ".escape(curdir,g:netrw_cd_escape)
-    endif
-   endif
-  endif
-  if exists("{a:vt}netrw_aikeep")   |let &l:ai     = {a:vt}netrw_aikeep      |unlet {a:vt}netrw_aikeep   |endif
-  if exists("{a:vt}netrw_awkeep")   |let &l:aw     = {a:vt}netrw_awkeep      |unlet {a:vt}netrw_awkeep   |endif
-  if exists("{a:vt}netrw_cikeep")   |let &l:ci     = {a:vt}netrw_cikeep      |unlet {a:vt}netrw_cikeep   |endif
-  if exists("{a:vt}netrw_cinkeep")  |let &l:cin    = {a:vt}netrw_cinkeep     |unlet {a:vt}netrw_cinkeep  |endif
-  if exists("{a:vt}netrw_cinokeep") |let &l:cino   = {a:vt}netrw_cinokeep    |unlet {a:vt}netrw_cinokeep |endif
-  if exists("{a:vt}netrw_comkeep")  |let &l:com    = {a:vt}netrw_comkeep     |unlet {a:vt}netrw_comkeep  |endif
-  if exists("{a:vt}netrw_cpokeep")  |let &l:cpo    = {a:vt}netrw_cpokeep     |unlet {a:vt}netrw_cpokeep  |endif
-  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
-   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
-   let dirkeep = escape(dirkeep,g:netrw_cd_escape)
-   if exists("{a:vt}netrw_dirkeep")  |exe "lcd ".dirkeep|unlet {a:vt}netrw_dirkeep  |endif
-  endif
-  if exists("{a:vt}netrw_fokeep")   |let &l:fo     = {a:vt}netrw_fokeep      |unlet {a:vt}netrw_fokeep   |endif
-  if exists("{a:vt}netrw_gdkeep")   |let &l:gd     = {a:vt}netrw_gdkeep      |unlet {a:vt}netrw_gdkeep   |endif
-  if exists("{a:vt}netrw_hidkeep")  |let &l:hidden = {a:vt}netrw_hidkeep     |unlet {a:vt}netrw_hidkeep  |endif
-  if exists("{a:vt}netrw_magic")    |let &l:magic  = {a:vt}netrw_magic       |unlet {a:vt}netrw_magic    |endif
-  if exists("{a:vt}netrw_repkeep")  |let &l:report = {a:vt}netrw_repkeep     |unlet {a:vt}netrw_repkeep  |endif
-  if exists("{a:vt}netrw_spellkeep")|let &l:spell  = {a:vt}netrw_spellkeep   |unlet {a:vt}netrw_spellkeep|endif
-  if exists("{a:vt}netrw_twkeep")   |let &l:tw     = {a:vt}netrw_twkeep      |unlet {a:vt}netrw_twkeep   |endif
-  if exists("{a:vt}netrw_wigkeep")  |let &l:wig    = {a:vt}netrw_wigkeep     |unlet {a:vt}netrw_wigkeep  |endif
-  if exists("s:yykeep")             |let  @@       = s:yykeep                |unlet s:yykeep             |endif
-  if exists("{a:vt}netrw_swfkeep")
-   if &directory == ""
-    " user hasn't specified a swapfile directory;
-    " netrw will temporarily set the swapfile directory
-    " to the current directory as returned by getcwd().
-    let &l:directory   = getcwd()
-    silent! let &l:swf = {a:vt}netrw_swfkeep
-    setlocal directory=
-    unlet {a:vt}netrw_swfkeep
-   elseif &l:swf != {a:vt}netrw_swfkeep
-    " following line causes a Press ENTER in windows -- can't seem to work around it!!!
-    silent! let &l:swf= {a:vt}netrw_swfkeep
-    unlet {a:vt}netrw_swfkeep
-   endif
-  endif
-  if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
-  if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
-"  call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
-"  call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"  call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%"))
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwSafeOptions: sets options to help netrw do its job {{{2
-fun! s:NetrwSafeOptions()
-"  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
-"  call Decho("window's ft=".&ft)
-  setlocal cino=
-  setlocal com=
-  setlocal cpo-=aA
-  if exists("&acd") | setlocal noacd | endif
-  setlocal nocin noai noci magic nospell nohid wig= noaw
-  setlocal fo=nroql2
-  setlocal tw=0
-  setlocal report=10000
-  if g:netrw_use_noswf && has("win32") && !has("win95")
-   setlocal noswf
-  endif
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
-"  call Dret("s:NetrwSafeOptions")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#NetrwClean: remove netrw {{{2
-" supports :NetrwClean  -- remove netrw from first directory on runtimepath
-"          :NetrwClean! -- remove netrw from all directories on runtimepath
-fun! netrw#NetrwClean(sys)
-"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
-
-  if a:sys
-   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
-  else
-   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
-  endif
-"  call Decho("choice=".choice)
-  let diddel= 0
-  let diddir= ""
-
-  if choice == 1
-   for dir in split(&rtp,',')
-    if filereadable(dir."/plugin/netrwPlugin.vim")
-"     call Decho("removing netrw-related files from ".dir)
-     if s:System("delete",dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
-     if s:System("delete",dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
-     if s:System("delete",dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
-     if s:System("delete",dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
-     if s:System("delete",dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
-     if s:System("delete",dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
-     let diddir= dir
-     let diddel= diddel + 1
-     if !a:sys|break|endif
-    endif
-   endfor
-  endif
-
-   echohl WarningMsg
-  if diddel == 0
-   echomsg "netrw is either not installed or not removable"
-  elseif diddel == 1
-   echomsg "removed one copy of netrw from <".diddir.">"
-  else
-   echomsg "removed ".diddel." copies of netrw"
-  endif
-   echohl None
-
-"  call Dret("netrw#NetrwClean")
-endfun
-
-" ------------------------------------------------------------------------
-"  Netrw Transfer Functions: {{{1
-" ===============================
-
-" ------------------------------------------------------------------------
-" netrw#NetRead: responsible for reading a file over the net {{{2
-"   mode: =0 read remote file and insert before current line
-"         =1 read remote file and insert after current line
-"         =2 replace with remote file
-"         =3 obtain file, but leave in temporary format
-fun! netrw#NetRead(mode,...)
-"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
-
-  " save options {{{3
-  call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
-
-  " interpret mode into a readcmd {{{3
-  if     a:mode == 0 " read remote file before current line
-   let readcmd = "0r"
-  elseif a:mode == 1 " read file after current line
-   let readcmd = "r"
-  elseif a:mode == 2 " replace with remote file
-   let readcmd = "%r"
-  elseif a:mode == 3 " skip read of file (leave as temporary)
-   let readcmd = "t"
-  else
-   exe a:mode
-   let readcmd = "r"
-  endif
-  let ichoice = (a:0 == 0)? 0 : 1
-"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
-
-  " Get Temporary Filename {{{3
-  let tmpfile= s:GetTempfile("")
-  if tmpfile == ""
-"   call Dret("netrw#NetRead : unable to get a tempfile!")
-   return
-  endif
-
-  while ichoice <= a:0
-
-   " attempt to repeat with previous host-file-etc
-   if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-    let choice = b:netrw_lastfile
-    let ichoice= ichoice + 1
-
-   else
-    exe "let choice= a:" . ichoice
-"    call Decho("no lastfile: choice<" . choice . ">")
-
-    if match(choice,"?") == 0
-     " give help
-     echomsg 'NetRead Usage:'
-     echomsg ':Nread machine:path                         uses rcp'
-     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
-     echomsg ':Nread "machine id password path"           uses ftp'
-     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
-     echomsg ':Nread fetch://machine/path                 uses fetch'
-     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
-     echomsg ':Nread http://[user@]machine/path           uses http  wget'
-     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
-     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
-     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
-     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
-     sleep 4
-     break
-
-    elseif match(choice,'^"') != -1
-     " Reconstruct Choice if choice starts with '"'
-"     call Decho("reconstructing choice")
-     if match(choice,'"$') != -1
-      " case "..."
-      let choice=strpart(choice,1,s:Strlen(choice)-2)
-     else
-       "  case "... ... ..."
-      let choice      = strpart(choice,1,s:Strlen(choice)-1)
-      let wholechoice = ""
-
-      while match(choice,'"$') == -1
-       let wholechoice = wholechoice . " " . choice
-       let ichoice     = ichoice + 1
-       if ichoice > a:0
-       	if !exists("g:netrw_quiet")
-	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
-	endif
-"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
-        return
-       endif
-       let choice= a:{ichoice}
-      endwhile
-      let choice= strpart(wholechoice,1,s:Strlen(wholechoice)-1) . " " . strpart(choice,0,s:Strlen(choice)-1)
-     endif
-    endif
-   endif
-
-"   call Decho("choice<" . choice . ">")
-   let ichoice= ichoice + 1
-
-   " Determine method of read (ftp, rcp, etc) {{{3
-   call s:NetrwMethod(choice)
-   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
-
-   " Check if NetrwBrowse() should be handling this request
-"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
-   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
-"    call Decho("yes, choice matches '^.*[\/]$'")
-    keepjumps call s:NetrwBrowse(0,choice)
-"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
-    return
-   endif
-
-   " ============
-   " Perform Protocol-Based Read {{{3
-   " ===========================
-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
-    echo "(netrw) Processing your read request..."
-   endif
-
-   ".........................................
-   " rcp:  NetRead Method #1 {{{3
-   if  b:netrw_method == 1 " read with rcp
-"    call Decho("read via rcp (method #1)")
-   " ER: nothing done with g:netrw_uid yet?
-   " ER: on Win2K" rcp machine[.user]:file tmpfile
-   " ER: if machine contains '.' adding .user is required (use $USERNAME)
-   " ER: the tmpfile is full path: rcp sees C:\... as host C
-   if s:netrw_has_nt_rcp == 1
-    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
-     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
-    else
-     " Any way needed it machine contains a '.'
-     let uid_machine = g:netrw_machine .'.'. $USERNAME
-    endif
-   else
-    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-    else
-     let uid_machine = g:netrw_machine
-    endif
-   endif
-"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".g:netrw_shq.uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile.g:netrw_shq)
-   exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".g:netrw_shq.uid_machine.":".escape(b:netrw_fname,' ?&;')." ".tmpfile.g:netrw_shq
-   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
-
-   ".........................................
-   " ftp + <.netrc>:  NetRead Method #2 {{{3
-   elseif b:netrw_method  == 2		" read with ftp + <.netrc>
-"     call Decho("read via ftp+.netrc (method #2)")
-     let netrw_fname= b:netrw_fname
-     call s:SaveBufVars()|new|call s:RestoreBufVars()
-     setlocal ff=unix
-     exe "put ='".g:netrw_ftpmode."'"
-"     call Decho("filter input: ".getline("."))
-     if exists("g:netrw_ftpextracmd")
-      exe "put ='".g:netrw_ftpextracmd."'"
-"      call Decho("filter input: ".getline("."))
-     endif
-     exe "put ='".'get \"'.netrw_fname.'\" '.tmpfile."'"
-"     call Decho("filter input: ".getline("."))
-     if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
-      exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
-     else
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
-      exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
-     endif
-     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
-      let debugkeep= &debug
-      setlocal debug=msg
-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
-      let &debug= debugkeep
-     endif
-     call s:SaveBufVars()|bd!|call s:RestoreBufVars()
-     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-     let b:netrw_lastfile = choice
-
-   ".........................................
-   " ftp + machine,id,passwd,filename:  NetRead Method #3 {{{3
-   elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
-    " Construct execution string (four lines) which will be passed through filter
-"    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    call s:SaveBufVars()|new|call s:RestoreBufVars()
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline("."))
-    else
-     put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline("."))
-    endif
-
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
-"     call Decho("filter input: ".getline("."))
-     put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline("."))
-    else
-     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline("."))
-    endif
-
-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline("."))
-    endif
-    if exists("g:netrw_ftpextracmd")
-     exe "put ='".g:netrw_ftpextracmd."'"
-"     call Decho("filter input: ".getline("."))
-    endif
-    put ='get \"'.netrw_fname.'\" '.tmpfile
-"    call Decho("filter input: ".getline("."))
-
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-    norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-"     call Decho("error<".getline(1).">")
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),5)
-     endif
-    endif
-    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " scp: NetRead Method #4 {{{3
-   elseif     b:netrw_method  == 4	" read with scp
-"    call Decho("read via scp (method #4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-"    call Decho("exe g:netrw_silentxfer.!".g:netrw_scp_cmd.useport." ".g:netrw_shq.g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape).g:netrw_shq." ".tmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_shq.g:netrw_machine.":".escape(b:netrw_fname,g:netrw_fname_escape).g:netrw_shq." ".tmpfile
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " http: NetRead Method #5 (wget) {{{3
-   elseif     b:netrw_method  == 5
-"    call Decho("read via http (method #5)")
-    if g:netrw_http_cmd == ""
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
-     endif
-"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
-     return
-    endif
-
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if match(b:netrw_fname,"#") == -1
-     " simple wget
-"     call Decho('using simple wget (# not in b:netrw_fname<'.b:netrw_fname.">)")
-"     call Decho("exe ".g:netrw_silentxfer."!".g:netrw_http_cmd." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq."http://".g:netrw_machine.netrw_fname.g:netrw_shq)
-     exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq."http://".g:netrw_machine.netrw_fname.g:netrw_shq
-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-
-    else
-     " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
-"     call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
-     let netrw_html= substitute(netrw_fname,"#.*$","","")
-     let netrw_tag = substitute(netrw_fname,"^.*#","","")
-"     call Decho("netrw_html<".netrw_html.">")
-"     call Decho("netrw_tag <".netrw_tag.">")
-"     call Decho("exe ".g:netrw_silentxfer."!".g:netrw_http_cmd." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq."http://".g:netrw_machine.netrw_html.g:netrw_shq)
-     exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq."http://".g:netrw_machine.netrw_html.g:netrw_shq
-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
-     exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
-    endif
-    let b:netrw_lastfile = choice
-    setlocal ro
-
-   ".........................................
-   " cadaver: NetRead Method #6 {{{3
-   elseif     b:netrw_method  == 6
-"    call Decho("read via cadaver (method #6)")
-
-    " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    new
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
-    else
-     put ='open '.g:netrw_machine
-    endif
-    put ='user '.g:netrw_uid.' '.s:netrw_passwd
-    put ='get '.netrw_fname.' '.tmpfile
-    put ='quit'
-
-    " perform cadaver operation:
-    norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
-    exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
-    bd!
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " rsync: NetRead Method #7 {{{3
-   elseif     b:netrw_method  == 7
-"    call Decho("read via rsync (method #7)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-"    call Decho("exe ".g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq." ".tmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq." ".tmpfile
-    let result		 = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " fetch: NetRead Method #8 {{{3
-   "    fetch://[user@]host[:http]/path
-   elseif     b:netrw_method  == 8
-"    call Decho("read via fetch (method #8)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if g:netrw_fetch_cmd == ""
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
-     endif
-"     call Dret("NetRead")
-    endif
-    if exists("g:netrw_option") && g:netrw_option == ":http"
-     let netrw_option= "http"
-    else
-     let netrw_option= "ftp"
-    endif
-"    call Decho("read via fetch for ".netrw_option)
-
-    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
-"     call Decho("exe ".g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".g:netrw_shq.netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname.g:netrw_shq)
-     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".g:netrw_shq.netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".netrw_fname.g:netrw_shq
-    else
-"     call Decho("exe ".g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".g:netrw_shq.netrw_option."://".g:netrw_machine."/".netrw_fname.g:netrw_shq)
-     exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".g:netrw_shq.netrw_option."://".g:netrw_machine."/".netrw_fname.g:netrw_shq
-    endif
-
-    let result		= s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-    setlocal ro
-
-   ".........................................
-   " sftp: NetRead Method #9 {{{3
-   elseif     b:netrw_method  == 9
-"    call Decho("read via sftp (method #9)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-"    call Decho("exe ".g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq." ".tmpfile)
-    exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq." ".tmpfile
-    let result		= s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " Complain {{{3
-   else
-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
-   endif
-  endwhile
-
-  " cleanup {{{3
-  if exists("b:netrw_method")
-"   call Decho("cleanup b:netrw_method and b:netrw_fname")
-   unlet b:netrw_method
-   unlet b:netrw_fname
-  endif
-  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't'
-"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
-   call s:System("delete",tmpfile)
-  endif
-  call s:NetrwOptionRestore("w:")
-
-"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
-endfun
-
-" ------------------------------------------------------------------------
-" netrw#NetWrite: responsible for writing a file over the net {{{2
-fun! netrw#NetWrite(...) range
-"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
-
-  " option handling
-  let mod= 0
-  call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
-
-  " Get Temporary Filename {{{3
-  let tmpfile= s:GetTempfile("")
-  if tmpfile == ""
-"   call Dret("netrw#NetWrite : unable to get a tempfile!")
-   return
-  endif
-
-  if a:0 == 0
-   let ichoice = 0
-  else
-   let ichoice = 1
-  endif
-
-  let curbufname= expand("%")
-"  call Decho("curbufname<".curbufname.">")
-  if &binary
-   " For binary writes, always write entire file.
-   " (line numbers don't really make sense for that).
-   " Also supports the writing of tar and zip files.
-"   call Decho("(write entire file) silent exe w! ".v:cmdarg." ".tmpfile)
-   silent exe "w! ".v:cmdarg." ".tmpfile
-  elseif g:netrw_cygwin
-   " write (selected portion of) file to temporary
-   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".cygtmpfile)
-   silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".cygtmpfile
-  else
-   " write (selected portion of) file to temporary
-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile)
-   silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
-  endif
-
-  if curbufname == ""
-   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
-   " on the temporary file's name.  Deletion of the temporary file during
-   " cleanup then causes an error message.
-   0file!
-  endif
-
-  " While choice loop: {{{3
-  while ichoice <= a:0
-
-   " Process arguments: {{{4
-   " attempt to repeat with previous host-file-etc
-   if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-    let choice = b:netrw_lastfile
-    let ichoice= ichoice + 1
-   else
-    exe "let choice= a:" . ichoice
-
-    " Reconstruct Choice if choice starts with '"'
-    if match(choice,"?") == 0
-     echomsg 'NetWrite Usage:"'
-     echomsg ':Nwrite machine:path                        uses rcp'
-     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
-     echomsg ':Nwrite "machine id password path"          uses ftp'
-     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
-     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
-     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
-     echomsg ':Nwrite rcp://machine/path                  uses rcp'
-     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
-     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
-     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
-     sleep 4
-     break
-
-    elseif match(choice,"^\"") != -1
-     if match(choice,"\"$") != -1
-       " case "..."
-      let choice=strpart(choice,1,s:Strlen(choice)-2)
-     else
-      "  case "... ... ..."
-      let choice      = strpart(choice,1,s:Strlen(choice)-1)
-      let wholechoice = ""
-
-      while match(choice,"\"$") == -1
-       let wholechoice= wholechoice . " " . choice
-       let ichoice    = ichoice + 1
-       if choice > a:0
-       	if !exists("g:netrw_quiet")
-	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
-	endif
-"        call Dret("netrw#NetWrite")
-        return
-       endif
-       let choice= a:{ichoice}
-      endwhile
-      let choice= strpart(wholechoice,1,s:Strlen(wholechoice)-1) . " " . strpart(choice,0,s:Strlen(choice)-1)
-     endif
-    endif
-   endif
-   let ichoice= ichoice + 1
-"   call Decho("choice<" . choice . "> ichoice=".ichoice)
-
-   " Determine method of write (ftp, rcp, etc) {{{4
-   call s:NetrwMethod(choice)
-
-   " =============
-   " Perform Protocol-Based Write {{{4
-   " ============================
-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
-    echo "(netrw) Processing your write request..."
-   endif
-
-   ".........................................
-   " rcp: NetWrite Method #1 {{{4
-   if  b:netrw_method == 1
-"    call Decho("write via rcp (method #1)")
-    if s:netrw_has_nt_rcp == 1
-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
-     else
-      let uid_machine = g:netrw_machine .'.'. $USERNAME
-     endif
-    else
-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-     else
-      let uid_machine = g:netrw_machine
-     endif
-    endif
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".g:netrw_shq.tmpfile.g:netrw_shq." ".uid_machine.":".netrw_fname)
-    exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".g:netrw_shq.tmpfile.g:netrw_shq." ".uid_machine.":".netrw_fname
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " ftp + <.netrc>: NetWrite Method #2 {{{4
-   elseif b:netrw_method == 2
-"    call Decho("write via ftp+.netrc (method #2)")
-    let netrw_fname= b:netrw_fname
-    new
-    setlocal ff=unix
-    exe "put ='".g:netrw_ftpmode."'"
-"    call Decho(" filter input: ".getline("."))
-    if exists("g:netrw_ftpextracmd")
-     exe "put ='".g:netrw_ftpextracmd."'"
-"     call Decho("filter input: ".getline("."))
-    endif
-    exe "put ='".'put \"'.tmpfile.'\" \"'.netrw_fname.'\"'."'"
-"    call Decho(" filter input: ".getline("."))
-    if exists("g:netrw_port") && g:netrw_port != ""
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
-     exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
-    else
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
-     exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine
-    endif
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),14)
-     endif
-     let mod=1
-    endif
-    bd!
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{4
-   elseif b:netrw_method == 3
-    " Construct execution string (four lines) which will be passed through filter
-"    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname= b:netrw_fname
-    new
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline("."))
-    else
-     put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline("."))
-    endif
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
-"     call Decho("filter input: ".getline("."))
-     put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline("."))
-    else
-     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline("."))
-    endif
-    put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
-"    call Decho("filter input: ".getline("."))
-    " save choice/id/password for future use
-    let b:netrw_lastfile = choice
-
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-    norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-     if  !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),15)
-     endif
-     let mod=1
-    endif
-    bd!
-
-   ".........................................
-   " scp: NetWrite Method #4 {{{4
-   elseif     b:netrw_method == 4
-"    call Decho("write via scp (method #4)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-"    call Decho("exe ".g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq)
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_shq.tmpfile.g:netrw_shq." ".g:netrw_shq.g:netrw_machine.":".netrw_fname.g:netrw_shq
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " http: NetWrite Method #5 {{{4
-   elseif     b:netrw_method == 5
-"    call Decho("write via http (method #5)")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
-    endif
-
-   ".........................................
-   " dav: NetWrite Method #6 (cadaver) {{{4
-   elseif     b:netrw_method == 6
-"    call Decho("write via cadaver (method #6)")
-
-    " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    new
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
-    else
-     put ='open '.g:netrw_machine
-    endif
-    put ='user '.g:netrw_uid.' '.s:netrw_passwd
-    put ='put '.tmpfile.' '.netrw_fname
-
-    " perform cadaver operation:
-    norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
-    exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
-    bd!
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " rsync: NetWrite Method #7 {{{4
-   elseif     b:netrw_method == 7
-"    call Decho("write via rsync (method #7)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-"    call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname)
-    exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".netrw_fname
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " sftp: NetWrite Method #9 {{{4
-   elseif     b:netrw_method == 9
-"    call Decho("read via sftp (method #9)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-    else
-     let uid_machine = g:netrw_machine
-    endif
-    new
-    setlocal ff=unix
-    put ='put \"'.escape(tmpfile,'\').'\" '.netrw_fname
-"    call Decho("filter input: ".getline("."))
-    norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine)
-    exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine
-    bd!
-    let b:netrw_lastfile= choice
-
-   ".........................................
-   " Complain {{{4
-   else
-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
-   endif
-  endwhile
-
-  " Cleanup: {{{3
-"  call Decho("cleanup")
-  if s:FileReadable(tmpfile)
-"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
-   call s:System("delete",tmpfile)
-  endif
-  call s:NetrwOptionRestore("w:")
-
-  if a:firstline == 1 && a:lastline == line("$")
-   " restore modifiability; usually equivalent to set nomod
-   let &mod= mod
-  endif
-
-"  call Dret("netrw#NetWrite")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#NetSource: source a remotely hosted vim script {{{2
-" uses NetRead to get a copy of the file into a temporarily file,
-"              then sources that file,
-"              then removes that file.
-fun! netrw#NetSource(...)
-"  call Dfunc("netrw#NetSource() a:0=".a:0)
-  if a:0 > 0 && a:1 == '?'
-   " give help
-   echomsg 'NetSource Usage:'
-   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
-   echomsg ':Nsource fetch://machine/path                 uses fetch'
-   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
-   echomsg ':Nsource http://[user@]machine/path           uses http  wget'
-   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
-   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
-   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
-   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
-   sleep 4
-  else
-   let i= 1
-   while i <= a:0
-    call netrw#NetRead(3,a:{i})
-"    call Decho("s:netread_tmpfile<".s:netrw_tmpfile.">")
-    if s:FileReadable(s:netrw_tmpfile)
-"     call Decho("exe so ".s:netrw_tmpfile)
-     exe "so ".s:netrw_tmpfile
-     call delete(s:netrw_tmpfile)
-     unlet s:netrw_tmpfile
-    else
-     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
-    endif
-    let i= i + 1
-   endwhile
-  endif
-"  call Dret("netrw#NetSource")
-endfun
-
-" ===========================================
-" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
-"    readcmd == %r : replace buffer with newly read file
-"            == 0r : read file at top of buffer
-"            == r  : read file after current line
-"            == t  : leave file in temporary form (ie. don't read into buffer)
-fun! s:NetrwGetFile(readcmd, tfile, method)
-"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
-
-  " readcmd=='t': simply do nothing
-  if a:readcmd == 't'
-"   call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
-   return
-  endif
-
-  " get name of remote filename (ie. url and all)
-  let rfile= bufname("%")
-"  call Decho("rfile<".rfile.">")
-
-  if exists("*NetReadFixup")
-   " for the use of NetReadFixup (not otherwise used internally)
-   let line2= line("$")
-  endif
-
-  if a:readcmd[0] == '%'
-  " get file into buffer
-"   call Decho("get file into buffer")
-
-   " rename the current buffer to the temp file (ie. tfile)
-   if g:netrw_cygwin
-    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
-   else
-    let tfile= a:tfile
-   endif
-"   "   call Decho("exe silent! keepalt file ".tfile)
-   exe "silent! keepalt file ".tfile
-
-   " edit temporary file (ie. read the temporary file in)
-   if     rfile =~ '\.zip$'
-"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
-    call zip#Browse(tfile)
-   elseif rfile =~ '\.tar$'
-"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.gz'
-"    call Decho("handling remote gzip-compressed tar file")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.bz2'
-"    call Decho("handling remote bz2-compressed tar file")
-    call tar#Browse(tfile)
-   else
-"    call Decho("edit temporary file")
-    e!
-   endif
-
-   " rename buffer back to remote filename
-"   call Decho("exe silent! keepalt file ".escape(rfile,' '))
-   exe "silent! keepalt file ".escape(rfile,' ')
-   if a:method == 5
-    set ft=html
-   else
-    filetype detect
-   endif
-"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
-   let line1 = 1
-   let line2 = line("$")
-
-  elseif s:FileReadable(a:tfile)
-   " read file after current line
-"   call Decho("read file<".a:tfile."> after current line")
-   let curline = line(".")
-   let lastline= line("$")
-"   call Decho("exe<".a:readcmd." ".v:cmdarg." ".a:tfile.">  line#".curline)
-   exe a:readcmd." ".v:cmdarg." ".a:tfile
-   let line1= curline + 1
-   let line2= line("$") - lastline + 1
-
-  else
-   " not readable
-"   call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"   call Decho("tfile<".a:tfile."> not readable")
-   call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
-"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
-   return
-  endif
-
-  " User-provided (ie. optional) fix-it-up command
-  if exists("*NetReadFixup")
-"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
-   call NetReadFixup(a:method, line1, line2)
-"  else " Decho
-"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
-  endif
-
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
-   " update the Buffers menu
-   call s:UpdateBuffersMenu()
-  endif
-
-"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
-
- " make sure file is being displayed
-"  redraw!
-
-"  call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"  call Dret("NetrwGetFile")
-endfun
-
-" ------------------------------------------------------------------------
-" s:NetrwMethod:  determine method of transfer {{{2
-"  method == 1: rcp
-"	     2: ftp + <.netrc>
-"	     3: ftp + machine, id, password, and [path]filename
-"	     4: scp
-"	     5: http (wget)
-"	     6: cadaver
-"	     7: rsync
-"	     8: fetch
-"	     9: sftp
-fun! s:NetrwMethod(choice)  " globals: method machine id passwd fname
-"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
-
-  " initialization
-  let b:netrw_method  = 0
-  let g:netrw_machine = ""
-  let b:netrw_fname   = ""
-  let g:netrw_port    = ""
-  let g:netrw_choice  = a:choice
-
-  " Patterns:
-  " mipf     : a:machine a:id password filename	     Use ftp
-  " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
-  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
-  " rcpurm   : rcp://[user@]host/filename	     Use rcp
-  " rcphf    : [user@]host:filename		     Use rcp
-  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
-  " httpurm  : http://[user@]host/filename	     Use wget
-  " davurm   : [s]dav://host[:port]/path             Use cadaver
-  " rsyncurm : rsync://host[:port]/path              Use rsync
-  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
-  " sftpurm  : sftp://[user@]host/filename  Use scp
-  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
-  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
-  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
-  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
-  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
-  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
-  let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
-  let davurm   = '^s\=dav://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
-  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
-  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
-  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
-
-"  call Decho("determine method:")
-  " Determine Method
-  " rcp://user@hostname/...path-to-file
-  if match(a:choice,rcpurm) == 0
-"   call Decho("rcp://...")
-   let b:netrw_method  = 1
-   let userid          = substitute(a:choice,rcpurm,'\1',"")
-   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
-   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
-
-  " scp://user@hostname/...path-to-file
-  elseif match(a:choice,scpurm) == 0
-"   call Decho("scp://...")
-   let b:netrw_method  = 4
-   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
-   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
-   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
-
-  " http://user@hostname/...path-to-file
-  elseif match(a:choice,httpurm) == 0
-"   call Decho("http://...")
-   let b:netrw_method = 5
-   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
-
-  " dav://hostname[:port]/..path-to-file..
-  elseif match(a:choice,davurm) == 0
-"   call Decho("dav://...")
-   let b:netrw_method= 6
-   if a:choice =~ '^s'
-    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
-   else
-    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
-   endif
-   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
-
-  " rsync://user@hostname/...path-to-file
-  elseif match(a:choice,rsyncurm) == 0
-"   call Decho("rsync://...")
-   let b:netrw_method = 7
-   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
-
-  " ftp://[user@]hostname[[:#]port]/...path-to-file
-  elseif match(a:choice,ftpurm) == 0
-"   call Decho("ftp://...")
-   let userid	      = substitute(a:choice,ftpurm,'\2',"")
-   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
-   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
-   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
-    let b:netrw_method = 3
-   else
-    if s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
-     let b:netrw_method= 2
-    else
-     if !exists("g:netrw_uid") || g:netrw_uid == ""
-      call NetUserPass()
-     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
-      call NetUserPass(g:netrw_uid)
-    " else just use current g:netrw_uid and s:netrw_passwd
-     endif
-     let b:netrw_method= 3
-    endif
-   endif
-
-  elseif match(a:choice,fetchurm) == 0
-"   call Decho("fetch://...")
-   let b:netrw_method = 8
-   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
-   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
-   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
-   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
-
-  " Issue an ftp : "machine id password [path/]filename"
-  elseif match(a:choice,mipf) == 0
-"   call Decho("(ftp) host id pass file")
-   let b:netrw_method  = 3
-   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
-   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
-   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
-   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
-
-  " Issue an ftp: "hostname [path/]filename"
-  elseif match(a:choice,mf) == 0
-"   call Decho("(ftp) host file")
-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
-    let b:netrw_method  = 3
-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
-
-   elseif s:FileReadable(expand("$HOME/.netrc"))
-    let b:netrw_method  = 2
-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
-   endif
-
-  " sftp://user@hostname/...path-to-file
-  elseif match(a:choice,sftpurm) == 0
-"   call Decho("sftp://...")
-   let b:netrw_method = 9
-   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
-
-  " Issue an rcp: hostname:filename"  (this one should be last)
-  elseif match(a:choice,rcphf) == 0
-"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
-   let b:netrw_method = 1
-   let userid	     = substitute(a:choice,rcphf,'\2',"")
-   let g:netrw_machine= substitute(a:choice,rcphf,'\3',"")
-   let b:netrw_fname  = substitute(a:choice,rcphf,'\4',"")
-"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
-"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
-"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
-"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
-
-  else
-   if !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:WARNING,"cannot determine method",45)
-   endif
-   let b:netrw_method  = -1
-  endif
-
-  " remove any leading [:#] from port number
-  if g:netrw_port != ""
-    let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
-  endif
-
-"  call Decho("a:choice       <".a:choice.">")
-"  call Decho("b:netrw_method <".b:netrw_method.">")
-"  call Decho("g:netrw_machine<".g:netrw_machine.">")
-"  call Decho("g:netrw_port   <".g:netrw_port.">")
-"  if exists("g:netrw_uid")		"Decho
-"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
-"  endif					"Decho
-"  if exists("s:netrw_passwd")		"Decho
-"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
-"  endif					"Decho
-"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
-"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method)
-endfun
-
-" ------------------------------------------------------------------------
-" NetReadFixup: this sort of function is typically written by the user {{{2
-"               to handle extra junk that their system's ftp dumps
-"               into the transfer.  This function is provided as an
-"               example and as a fix for a Windows 95 problem: in my
-"               experience, win95's ftp always dumped four blank lines
-"               at the end of the transfer.
-if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
- fun! NetReadFixup(method, line1, line2)
-"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
-   if method == 3   " ftp (no <.netrc>)
-    let fourblanklines= line2 - 3
-    silent fourblanklines.",".line2."g/^\s*/d"
-   endif
-"   call Dret("NetReadFixup")
- endfun
-endif
-
-" ---------------------------------------------------------------------
-" NetUserPass: set username and password for subsequent ftp transfer {{{2
-"   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 s:netrw_passwd= inputsecret("Enter Password: ")
- else " from command line
-"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
-  let s:netrw_passwd=a:2
- endif
-
-"  call Dret("NetUserPass")
-endfun
-
-" ===========================================
-"  Shared Browsing Support:    {{{1
-" ===========================================
-
-" ---------------------------------------------------------------------
-" s:BrowserMaps: {{{2
-fun! s:BrowserMaps(islocal)
-"  call Dfunc("s:BrowserMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
-  if a:islocal
-   nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
-   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
-   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
-   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
-   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
-   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
-   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
-   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
-   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
-   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
-   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
-   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
-   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
-   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
-   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(1)<cr>
-   nnoremap <buffer> <silent> c		:exe "lcd ".escape(b:netrw_curdir,g:netrw_cd_escape)<cr>
-   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
-   nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("")<cr>
-   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(1)<cr>
-   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(3)<cr>
-   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
-   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
-   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
-   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookmarkDir(4,expand("%"))<cr>
-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookmarkDir(5,expand("%"))<cr>
-   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
-   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
-   if !hasmapto('<Plug>NetrwHideEdit')
-    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
-   endif
-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(1)<cr>
-   if !hasmapto('<Plug>NetrwRefresh')
-    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
-   endif
-   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   if s:didstarstar || !mapcheck("<s-down>","n")
-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
-   endif
-   if s:didstarstar || !mapcheck("<s-up>","n")
-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
-   endif
-   if g:netrw_mousemaps == 1
-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.b:netrw_curdir.'")<cr>'
-    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.b:netrw_curdir.'")<cr>'
-   endif
-   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.b:netrw_curdir.'")<cr>'
-   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.b:netrw_curdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.b:netrw_curdir.'")<cr>'
-   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.b:netrw_curdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.b:netrw_curdir.'")<cr>'
-   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.b:netrw_curdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
-   nnoremap <buffer> <F1>		:he netrw-dir<cr>
-
-  else " remote
-   call s:RemotePathAnalysis(b:netrw_curdir)
-   nnoremap <buffer> <silent> <cr>	:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
-   nnoremap <buffer> <silent> <c-l>	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
-   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(0)<cr>
-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
-   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
-   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
-   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
-   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
-   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
-   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
-   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
-   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
-   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
-   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
-   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
-   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_cur)<cr>
-   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
-   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
-   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(0)<cr>
-   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(0)<cr>
-   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
-   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(0)<cr>
-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
-   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
-   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookmarkDir(4,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookmarkDir(5,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
-   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
-   if !hasmapto('<Plug>NetrwHideEdit')
-    nmap <buffer> <c-h> <Plug>NetrwHideEdit
-   endif
-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(0)<cr>
-   if !hasmapto('<Plug>NetrwRefresh')
-    nmap <buffer> <c-l> <Plug>NetrwRefresh
-   endif
-   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   if g:netrw_mousemaps == 1
-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
-    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
-   endif
-   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
-   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
-   exe 'nnoremap <buffer> <silent> d	:call <SID>NetrwMakeDir("'.s:user.s:machine.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D	:call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
-   exe 'vnoremap <buffer> <silent> D	:call <SID>NetrwRemoteRm("'.s:user.s:machine.'","'.s:path.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R	:call <SID>NetrwRemoteRename("'.s:user.s:machine.'","'.s:path.'")<cr>'
-   exe 'vnoremap <buffer> <silent> R	:call <SID>NetrwRemoteRename("'.s:user.s:machine.'","'.s:path.'")<cr>'
-   nnoremap <buffer> <F1>			:he netrw-browse-cmds<cr>
-  endif
-  call s:SetRexDir(a:islocal,b:netrw_curdir)
-"  call Dret("s:BrowserMaps")
-endfun
-
-" ---------------------------------------------------------------------
-" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
-fun! s:ExplorePatHls(pattern)
-"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
-  let repat= substitute(a:pattern,'^**/\{1,2}','','')
-"  call Decho("repat<".repat.">")
-  let repat= escape(repat,'][.\')
-"  call Decho("repat<".repat.">")
-  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
-"  call Dret("s:ExplorePatHls repat<".repat.">")
-  return repat
-endfun
-
-" ---------------------------------------------------------------------
-"  s:NetrwBookmarkDir: {{{2
-"    0: (user: <b>)   bookmark current directory
-"    1: (user: <B>)   change to the bookmarked directory
-"    2: (user: <q>)   list bookmarks
-"    3: (browsing)    record current directory history
-"    4: (user: <u>)   go up   (previous) bookmark
-"    5: (user: <U>)   go down (next)     bookmark
-fun! s:NetrwBookmarkDir(chg,curdir)
-"  call Dfunc("NetrwBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." bookmax=".g:NETRW_BOOKMARKMAX." histmax=".g:netrw_dirhistmax)
-
-  if a:chg == 0
-   " bookmark the current directory
-"   call Decho("(user: <b>) bookmark the current directory")
-   if v:count > 0
-    " handle bookmark# specified via the count
-    let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
-    if !exists("g:NETRW_BOOKMARKMAX")
-     let g:NETRW_BOOKMARKMAX= v:count
-    elseif v:count > g:NETRW_BOOKMARKMAX
-     let g:NETRW_BOOKMARKMAX= v:count
-    endif
-   else
-    " handle no count specified
-    let g:NETRW_BOOKMARKMAX                       = g:NETRW_BOOKMARKMAX + 1
-    let g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX} = a:curdir
-   endif
-   echo "bookmarked the current directory"
-
-  elseif a:chg == 1
-   " change to the bookmarked directory
-"   call Decho("(user: <B>) change to the bookmarked directory")
-   if exists("g:NETRW_BOOKMARKDIR_{v:count}")
-    exe "e ".g:NETRW_BOOKMARKDIR_{v:count}
-   else
-    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
-   endif
-
-  elseif a:chg == 2
-"   redraw!
-   let didwork= 0
-   " list user's bookmarks
-"   call Decho("(user: <q>) list user's bookmarks")
-   if exists("g:NETRW_BOOKMARKMAX")
-"    call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
-    let cnt= 0
-    while cnt <= g:NETRW_BOOKMARKMAX
-     if exists("g:NETRW_BOOKMARKDIR_{cnt}")
-"      call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
-      echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
-      let didwork= 1
-     endif
-     let cnt= cnt + 1
-    endwhile
-   endif
-
-   " list directory history
-   let cnt     = g:NETRW_DIRHIST_CNT
-   let first   = 1
-   let histcnt = 0
-   while ( first || cnt != g:NETRW_DIRHIST_CNT )
-"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
-    let histcnt= histcnt + 1
-    if exists("g:NETRW_DIRHIST_{cnt}")
-"     call Decho("Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
-     echo "Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
-     let didwork= 1
-    endif
-    let first = 0
-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
-    if cnt < 0
-     let cnt= cnt + g:netrw_dirhistmax
-    endif
-   endwhile
-   if didwork
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   endif
-
-  elseif a:chg == 3
-   " saves most recently visited directories (when they differ)
-"   call Decho("(browsing) record curdir history")
-   if !exists("g:NETRW_DIRHIST_0") || g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} != a:curdir
-    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
-"    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
-    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= a:curdir
-"    call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
-   endif
-
-  elseif a:chg == 4
-   " u: change to the previous directory stored on the history list
-"   call Decho("(user: <u>) chg to prev dir from history")
-   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
-   if g:NETRW_DIRHIST_CNT < 0
-    let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
-   endif
-   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
-"    call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-     setlocal ma noro
-"     call Decho("setlocal ma noro")
-     %d
-     setlocal nomod
-"     call Decho("setlocal nomod")
-    endif
-"    call Decho("exe e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
-    exe "e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
-   else
-    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
-    echo "Sorry, no predecessor directory exists yet"
-   endif
-
-  elseif a:chg == 5
-   " U: change to the subsequent directory stored on the history list
-"   call Decho("(user: <U>) chg to next dir from history")
-   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
-   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
-"    call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-     setlocal ma noro
-"     call Decho("setlocal ma noro")
-     %d
-"     call Decho("removed all lines from buffer (%d)")
-     setlocal nomod
-"     call Decho("setlocal nomod")
-    endif
-"    call Decho("exe e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
-    exe "e! ".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}
-   else
-    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
-    if g:NETRW_DIRHIST_CNT < 0
-     let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
-    endif
-    echo "Sorry, no successor directory exists yet"
-   endif
-  endif
-  call s:NetrwBookmarkMenu()
-"  call Dret("NetrwBookmarkDir")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
-"  list of the contents of a local or remote directory.  It is assumed that the
-"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
-"  with the requested remote hostname first.
-fun! s:NetrwBrowse(islocal,dirname)
-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
-"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%").">")
-"  call Decho("tab#".tabpagenr()." win#".winnr())
-"  call Dredir("ls!")
-
-  if exists("s:netrw_skipbrowse")
-   unlet s:netrw_skipbrowse
-"   call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
-   return
-  endif
-
-  call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
-
-  " re-instate any marked files
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-"   call Decho("clearing marked files")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
-  endif
-
-  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
-"   call Decho("handle w:netrw_acdkeep:")
-"   call Decho("lcd ".escape(a:dirname,g:netrw_cd_escape)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
-   exe 'lcd '.escape(a:dirname,g:netrw_cd_escape)
-"   call Decho("getcwd<".getcwd().">")
-
-  elseif !a:islocal && a:dirname !~ '[\/]$' && a:dirname !~ '^"'
-   " looks like a regular file, attempt transfer
-"   call Decho("attempt transfer as regular file<".a:dirname.">")
-
-   " remove any filetype indicator from end of dirname, except for the {{{3
-   " "this is a directory" indicator (/).
-   " There shouldn't be one of those here, anyway.
-   let path= substitute(a:dirname,'[*=@|]\r\=$','','e')
-"   call Decho("new path<".path.">")
-   call s:RemotePathAnalysis(a:dirname)
-
-   " remote-read the requested file into current buffer {{{3
-   mark '
-   call s:NetrwEnew(a:dirname)
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
-   let b:netrw_curdir= a:dirname
-"   call Decho("exe silent! keepalt file ".s:method."://".s:user.s:machine."/".escape(s:path,g:netrw_cd_escape)." (bt=".&bt.")")
-   exe "silent! keepalt file ".s:method."://".s:user.s:machine."/".escape(s:path,g:netrw_cd_escape)
-   exe "silent keepalt doau BufReadPre ".s:fname
-   silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
-   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz'
-    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
-    exe "silent keepalt doau BufReadPost ".s:fname
-   endif
-
-   " save certain window-oriented variables into buffer-oriented variables {{{3
-   call s:SetBufWinVars()
-   call s:NetrwOptionRestore("w:")
-   setlocal ma nomod
-
-"   call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"   call Dret("s:NetrwBrowse : file<".s:fname.">")
-   return
-  endif
-
-  " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
-  call s:UseBufWinVars()
-
-  " set up some variables {{{3
-  let b:netrw_browser_active = 1
-  let dirname                = a:dirname
-  let s:last_sort_by         = g:netrw_sort_by
-
-  " set up menu {{{3
-  call s:NetrwMenu(1)
-
-  " set up buffer {{{3
-  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
-  " maintain markfile highlighting
-  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
-"   call Decho("bufnr(%)=".bufnr('%'))
-"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
-  else
-"   call Decho("2match none")
-   2match none
-  endif
-  if reusing
-   call s:NetrwOptionRestore("w:")
-   setlocal noma nomod nowrap
-"   call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"   call Dret("s:NetrwBrowse : re-using buffer")
-   return
-  endif
-
-  " set b:netrw_curdir to the new directory name {{{3
-"  call Decho("set b:netrw_curdir to the new directory name:")
-   let b:netrw_curdir= dirname
-  if b:netrw_curdir =~ '[/\\]$'
-   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
-  endif
-  if b:netrw_curdir == ''
-   if has("amiga")
-    " On the Amiga, the empty string connotes the current directory
-    let b:netrw_curdir= getcwd()
-   else
-    " under unix, when the root directory is encountered, the result
-    " from the preceding substitute is an empty string.
-    let b:netrw_curdir= '/'
-   endif
-  endif
-  if !a:islocal && b:netrw_curdir !~ '/$'
-   let b:netrw_curdir= b:netrw_curdir.'/'
-  endif
-"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
-
-  " ------------
-  " (local only) {{{3
-  " ------------
-  if a:islocal
-"   call Decho("local only:")
-
-   " Set up ShellCmdPost handling.  Append current buffer to browselist
-   call s:LocalFastBrowser()
-
-  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
-   if !g:netrw_keepdir
-"    call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-"    call Decho('exe cd '.escape(b:netrw_curdir,g:netrw_cd_escape))
-    try
-     exe 'lcd '.escape(b:netrw_curdir,g:netrw_cd_escape)
-    catch /^Vim\%((\a\+)\)\=:E472/
-     call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",33)
-     if exists("w:netrw_prvdir")
-      let b:netrw_curdir= w:netrw_prvdir
-     else
-      call s:NetrwOptionRestore("w:")
-      setlocal noma nomod nowrap
-      let b:netrw_curdir= dirname
-"      call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"      call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
-      return
-     endif
-    endtry
-   endif
-
-  " --------------------------------
-  " remote handling: {{{3
-  " --------------------------------
-  else
-"   call Decho("remote only:")
-
-   " analyze a:dirname and g:netrw_list_cmd {{{4
-"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> a:dirname<".a:dirname.">")
-   if a:dirname =~ "^NetrwTreeListing\>"
-    let dirname= b:netrw_curdir
-"    call Decho("(dirname was ".a:dirname.") dirname<".dirname.">")
-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-    let dirname= substitute(b:netrw_curdir,'\\','/','g')
-    if dirname !~ '/$'
-     let dirname= dirname.'/'
-    endif
-    let b:netrw_curdir = dirname
-"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
-   else
-    let dirname = substitute(a:dirname,'\\','/','g')
-"    call Decho("(normal) dirname<".dirname.">")
-   endif
-
-   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
-   if dirname !~ dirpat
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
-    endif
-    call s:NetrwOptionRestore("w:")
-    setlocal noma nomod nowrap
-"    call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
-    return
-   endif
-   let b:netrw_curdir= dirname
-"   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
-  endif  " (additional remote handling)
-
-  " -----------------------
-  " Directory Listing: {{{3
-  " -----------------------
-  call s:BrowserMaps(a:islocal)
-  call s:PerformListing(a:islocal)
-
-"  call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"  call Dret("s:NetrwBrowse : did PerformListing")
-  return
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwFileInfo: supports qf (query for file information) {{{2
-fun! s:NetrwFileInfo(islocal,fname)
-"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
-  if a:islocal
-   if (has("unix") || has("macunix")) && executable("/bin/ls")
-    echo system("/bin/ls -lsad ".a:fname)
-   else
-    " use vim functions to return information about file below cursor
-    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
-     let fname= substitute(a:fname,".$","","")
-    else
-     let fname= a:fname
-    endif
-    let t  = getftime(fname)
-    let sz = getfsize(fname)
-    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
-"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
-   endif
-  else
-   echo "sorry, \"qf\" not supported yet for remote files"
-  endif
-"  call Dret("s:NetrwFileInfo")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwGetBuffer: {{{2
-"   returns 0=cleared buffer
-"           1=re-used buffer
-fun! s:NetrwGetBuffer(islocal,dirname)
-"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
-  let dirname= a:dirname
-
-  " re-use buffer if possible {{{3
-"  call Decho("--re-use a buffer if possible--")
-  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-   " find NetrwTreeList buffer if there is one
-   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
-"    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
-    let eikeep= &ei
-    set ei=all
-    exe "b ".w:netrw_treebufnr
-    let &ei= eikeep
-"    call Dret("s:NetrwGetBuffer : bufnum#".bufnum."<NetrwTreeListing>")
-    return
-   endif
-   let bufnum= -1
-"   call Decho("  liststyle=TREE but w:netrw_treebufnr doesn't exist")
-
-  else
-   " find buffer number of buffer named precisely the same as dirname {{{3
-"   call Decho("--find buffer numnber of buffer named precisely the same as dirname--")
-"   call Dredir("ls!")
-
-   " get dirname and associated buffer number
-   let bufnum  = bufnr(escape(dirname,'\'))
-"   call Decho("  find buffer<".dirname.">'s number ")
-"   call Decho("  bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
-
-   if bufnum < 0 && dirname !~ '/$'
-    " trying appending a trailing /
-"    call Decho("  try appending a trailing / to dirname<".dirname.">")
-    let bufnum= bufnr(escape(dirname.'/','\'))
-    if bufnum > 0
-     let dirname= dirname.'/'
-    endif
-   endif
-
-   if bufnum < 0 && dirname =~ '/$'
-    " trying removing a trailing /
-"    call Decho("  try removing a trailing / from dirname<".dirname.">")
-    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
-    if bufnum > 0
-     let dirname= substitute(dirname,'/$','','')
-    endif
-   endif
-
-"   call Decho("  findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
-   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
-   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
-    " handle approximate matches
-"    call Decho("  handling approx match: bufnum#%d<".bufname(bufnum)."> approx= dirname<".dirname.">")
-    let ibuf    = 1
-    let buflast = bufnr("$")
-"    call Decho("  findbuf2: buflast=".buflast)
-    while ibuf <= buflast
-     let bname= substitute(bufname(ibuf),'\\','/','g')
-"     call Decho("  findbuf3: dirname<".dirname."> bufname(".ibuf.")<".bname.">")
-     if bname != '' && bname !~ '/' && dirname =~ '/'.bname.'/\=$' | break | endif
-     if bname   =~ '^'.dirname.'/\=$' | break | endif
-     if dirname =~ '^'.bname.'/$'     | break | endif
-     let ibuf= ibuf + 1
-    endwhile
-    if ibuf > buflast
-     let bufnum= -1
-    else
-     let bufnum= ibuf
-    endif
-"    call Decho("  findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
-   endif
-  endif
-
-  " get enew buffer and name it -or- re-use buffer {{{3
-"  call Decho("--get enew buffer and name it OR re-use buffer-- (bufnum=".bufnum.")")
-  mark '
-  if bufnum < 0 || !bufexists(bufnum)
-   call s:NetrwEnew(dirname)
-"   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
-   " name the buffer
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-    " Got enew buffer; transform into a NetrwTreeListing
-"    call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
-    if !exists("s:netrw_treelistnum")
-     let s:netrw_treelistnum= 1
-    else
-     let s:netrw_treelistnum= s:netrw_treelistnum + 1
-    endif
-    let w:netrw_treebufnr= bufnr("%")
-"    call Decho("  exe silent! keepalt file NetrwTreeListing ".s:netrw_treelistnum)
-    exe 'silent! keepalt file NetrwTreeListing\ '.s:netrw_treelistnum
-    nnoremap <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
-    nnoremap <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
-    nnoremap <silent> <buffer> [[       :silent call <SID>TreeListMove('[')<cr>
-    nnoremap <silent> <buffer> ]]       :silent call <SID>TreeListMove(']')<cr>
-"    call Decho("  tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
-   else
-"    let v:errmsg= "" " Decho
-    let escdirname= escape(dirname,g:netrw_cd_escape)
-"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
-"    call Decho('  exe silent! keepalt file '.escdirname)
-    exe 'silent! keepalt file '.escdirname
-"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
-   endif
-"   call Decho("  named enew buffer#".bufnr("%")."<".bufname("%").">")
-
-  else " Re-use the buffer
-"   call Decho("--re-use buffer#".bufnum.": --")
-   let eikeep= &ei
-   set ei=all
-   if getline(2) =~ '^" Netrw Directory Listing'
-"    call Decho("  re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  keepalt b ".bufnum)
-    exe "keepalt b ".bufnum
-   else
-"    call Decho("  reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  b ".bufnum)
-    exe "b ".bufnum
-   endif
-   if bufname("%") == '.'
-    exe "silent! keepalt file ".escape(getcwd(),' ')
-   endif
-   let &ei= eikeep
-   if line("$") <= 1
-    call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
-    return 0
-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-"    call Decho("--re-use tree listing--")
-"    call Decho("  clear buffer<".expand("%")."> with :%d")
-    silent %d
-    call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
-    return 0
-   else
-"    call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%"))
-    return 1
-   endif
-  endif
-
-  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
-  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
-  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
-  "  med    1         D      H
-  "  fast   2         H      H
-"  call Decho("--do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc--")
-  let fname= expand("%")
-  call s:NetrwListSettings(a:islocal)
-  exe "keepalt file ".escape(fname,' ')
-
-  " delete all lines from buffer {{{3
-"  call Decho("--delete all lines from buffer--")
-"  call Decho("  clear buffer<".expand("%")."> with :%d")
-  keepalt silent! %d
-
-"  call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%"))
-  return 0
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwGetcwd: get the current directory. {{{2
-"   Change backslashes to forward slashes, if any.
-"   If doesc is true, escape certain troublesome characters
-fun! s:NetrwGetcwd(doesc)
-"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
-  let curdir= substitute(getcwd(),'\\','/','ge')
-  if curdir !~ '[\/]$'
-   let curdir= curdir.'/'
-  endif
-  if a:doesc
-   let curdir= escape(curdir,g:netrw_cd_escape)
-  endif
-"  call Dret("NetrwGetcwd <".curdir.">")
-  return curdir
-endfun
-
-" ---------------------------------------------------------------------
-"  s:NetrwGetWord: it gets the directory named under the cursor {{{2
-fun! s:NetrwGetWord()
-"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
-  call s:UseBufWinVars()
-
-  " insure that w:netrw_liststyle is set up
-  if !exists("w:netrw_liststyle")
-   if exists("g:netrw_liststyle")
-    let w:netrw_liststyle= g:netrw_liststyle
-   else
-    let w:netrw_liststyle= s:THINLIST
-   endif
-"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
-  endif
-
-  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
-   " Active Banner support
-"   call Decho("active banner handling")
-   norm! 0
-   let dirname= "./"
-   let curline= getline(".")
-
-   if curline =~ '"\s*Sorted by\s'
-    norm s
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "s" also works'
-
-   elseif curline =~ '"\s*Sort sequence:'
-    let s:netrw_skipbrowse= 1
-    echo 'Press "S" to edit sorting sequence'
-
-   elseif curline =~ '"\s*Quick Help:'
-    norm ?
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "?" also works'
-
-   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
-    norm a
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "a" also works'
-
-   elseif line("$") > w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt
-   endif
-
-  elseif w:netrw_liststyle == s:THINLIST
-"   call Decho("thin column handling")
-   norm! 0
-   let dirname= getline(".")
-
-  elseif w:netrw_liststyle == s:LONGLIST
-"   call Decho("long column handling")
-   norm! 0
-   let dirname= substitute(getline("."),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
-
-  elseif w:netrw_liststyle == s:TREELIST
-"   call Decho("treelist handling")
-   let dirname= substitute(getline("."),'^\(| \)*','','e')
-
-  else
-"   call Decho("obtain word from wide listing")
-   let dirname= getline(".")
-
-   if !exists("b:netrw_cpf")
-    let b:netrw_cpf= 0
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
-"    call Decho("computed cpf")
-   endif
-
-"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
-   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
-"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
-"   call Decho("1: dirname<".dirname.">")
-   if filestart > 0|let dirname= substitute(dirname,'^.\{'.filestart.'}','','')|endif
-"   call Decho("2: dirname<".dirname.">")
-   let dirname   = substitute(dirname,'^\(.\{'.b:netrw_cpf.'}\).*$','\1','e')
-"   call Decho("3: dirname<".dirname.">")
-   let dirname   = substitute(dirname,'\s\+$','','e')
-"   call Decho("4: dirname<".dirname.">")
-  endif
-
-  " symlinks are indicated by a trailing "@".  Remove it before further processing.
-  let dirname= substitute(dirname,"@$","","")
-
-  " executables are indicated by a trailing "*".  Remove it before further processing.
-  let dirname= substitute(dirname,"\*$","","")
-
-"  call Dret("s:NetrwGetWord <".dirname.">")
-  return dirname
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwListSettings: {{{2
-fun! s:NetrwListSettings(islocal)
-"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
-  let fname= bufname("%")
-  setlocal bt=nofile nobl ma nonu nowrap noro
-"  call Decho("setlocal bt=nofile nobl ma nonu nowrap noro")
-  exe "keepalt file ".escape(fname,' ')
-  if g:netrw_use_noswf
-   setlocal noswf
-  endif
-"  call Dredir("ls!")
-"  call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
-  exe "setlocal ts=".g:netrw_maxfilenamelen
-  setlocal isk+=.,~,-
-  if g:netrw_fastbrowse > a:islocal
-   setlocal bh=hide
-  else
-   setlocal bh=delete
-  endif
-"  call Dret("s:NetrwListSettings")
-endfun
-
-" ---------------------------------------------------------------------
-"  s:NetrwListStyle: {{{2
-"  islocal=0: remote browsing
-"         =1: local browsing
-fun! s:NetrwListStyle(islocal)
-"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
-  let fname             = s:NetrwGetWord()
-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
-  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
-"  call Decho("fname<".fname.">")
-"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
-
-  if w:netrw_liststyle == s:THINLIST
-   " use one column listing
-"   call Decho("use one column list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
-
-  elseif w:netrw_liststyle == s:LONGLIST
-   " use long list
-"   call Decho("use long list")
-   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
-
-  elseif w:netrw_liststyle == s:WIDELIST
-   " give wide list
-"   call Decho("use wide list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
-
-  elseif w:netrw_liststyle == s:TREELIST
-"   call Decho("use tree list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
-
-  else
-   call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
-   let g:netrw_liststyle = s:THINLIST
-   let w:netrw_liststyle = g:netrw_liststyle
-   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
-  endif
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
-
-  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
-"  call Decho("clear buffer<".expand("%")."> with :%d")
-  %d
-
-  " refresh the listing
-  let svpos= netrw#NetrwSavePosn()
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-  " keep cursor on the filename
-  silent keepjumps $
-  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
-"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
-  if result <= 0 && exists("w:netrw_bannercnt")
-   exe "keepjumps ".w:netrw_bannercnt
-  endif
-
-"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwBookmarkMenu: Uses menu priorities {{{2
-"                      .2.[cnt] for bookmarks, and
-"                      .3.[cnt] for history
-"                      (see s:NetrwMenu())
-fun! s:NetrwBookmarkMenu()
-  if !exists("s:netrw_menucnt")
-   return
-  endif
-"  call Dfunc("NetrwBookmarkMenu() bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." menucnt=".s:netrw_menucnt)
-
-  " the following test assures that gvim is running, has menus available, and has menus enabled.
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-   if exists("g:NetrwTopLvlMenu")
-    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmark'
-   endif
-
-   " show bookmarked places
-   let cnt       = 0
-   while cnt <= g:NETRW_BOOKMARKMAX
-    if exists("g:NETRW_BOOKMARKDIR_{cnt}")
-     let bmdir= escape(g:NETRW_BOOKMARKDIR_{cnt},'.')
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmdir.'	:e '.g:NETRW_BOOKMARKDIR_{cnt})
-     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmdir.'	:e '.g:NETRW_BOOKMARKDIR_{cnt}."\<cr>"
-    endif
-    let cnt= cnt + 1
-   endwhile
-
-   " show directory browsing history
-   let cnt     = g:NETRW_DIRHIST_CNT
-   let first   = 1
-   let histcnt = 0
-   while ( first || cnt != g:NETRW_DIRHIST_CNT )
-    let histcnt  = histcnt + 1
-    let priority = g:NETRW_DIRHIST_CNT + histcnt
-    if exists("g:NETRW_DIRHIST_{cnt}")
-     let bmdir= escape(g:NETRW_DIRHIST_{cnt},'.')
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'	:e '.g:NETRW_DIRHIST_{cnt})
-     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'	:e '.g:NETRW_DIRHIST_{cnt}."\<cr>"
-    endif
-    let first = 0
-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
-    if cnt < 0
-     let cnt= cnt + g:netrw_dirhistmax
-    endif
-   endwhile
-  endif
-"  call Dret("NetrwBookmarkMenu")
-endfun
-
-" ---------------------------------------------------------------------
-"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
-"                       directory and a new directory name.  Also, if the
-"                       "new directory name" is actually a file,
-"                       NetrwBrowseChgDir() edits the file.
-fun! s:NetrwBrowseChgDir(islocal,newdir,...)
-"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
-
-  if !exists("b:netrw_curdir")
-"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
-   echoerr "(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!"
-"   call Dret("s:NetrwBrowseChgDir")
-   return
-  endif
-
-  call s:NetrwOptionSave("s:")
-  call s:NetrwSafeOptions()
-  let nbcd_curpos = netrw#NetrwSavePosn()
-  let dirname     = substitute(b:netrw_curdir,'\\','/','ge')
-  let newdir      = a:newdir
-  let dolockout   = 0
-
-  " set up o/s-dependent directory recognition pattern
-  if has("amiga")
-   let dirpat= '[\/:]$'
-  else
-   let dirpat= '[\/]$'
-  endif
-"  call Decho("dirname<".dirname.">  dirpat<".dirpat.">")
-
-  if dirname !~ dirpat
-   " apparently vim is "recognizing" that it is in a directory and
-   " is removing the trailing "/".  Bad idea, so I put it back.
-   let dirname= dirname.'/'
-"   call Decho("adjusting dirname<".dirname.">")
-  endif
-
-  if newdir !~ dirpat
-   " ------------
-   " edit a file:
-   " ------------
-"   call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
-    let dirname= s:NetrwTreeDir()
-    if dirname =~ '/$'
-     let dirname= dirname.newdir
-    else
-     let dirname= s:NetrwTreeDir()."/".newdir
-    endif
-"    call Decho("tree listing")
-   elseif newdir =~ '^\(/\|\a:\)'
-    let dirname= newdir
-   else
-    let dirname= s:ComposePath(dirname,newdir)
-   endif
-"   call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
-   " this lets NetrwBrowseX avoid the edit
-   if a:0 < 1
-"    call Decho("dirname<".dirname."> netrw_cd_escape<".g:netrw_cd_escape."> browse_split=".g:netrw_browse_split)
-"    call Decho("set up windows for editing<".escape(dirname,g:netrw_cd_escape).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
-    call s:NetrwOptionRestore("s:")
-    if !exists("s:didsplit")
-     if     g:netrw_browse_split == 1
-      new
-      wincmd _
-     elseif g:netrw_browse_split == 2
-      rightb vert new
-      wincmd |
-     elseif g:netrw_browse_split == 3
-      tabnew
-     elseif g:netrw_browse_split == 4
-      if s:NetrwPrevWinOpen(2) == 3
-"       call Dret("s:NetrwBrowseChgDir")
-       return
-      endif
-     else
-      " handling a file, didn't split, so remove menu
-"      call Decho("handling a file+didn't split, so remove menu")
-      call s:NetrwMenu(0)
-      " optional change to window
-      if g:netrw_chgwin >= 1
-       exe g:netrw_chgwin."wincmd w"
-      endif
-     endif
-    endif
-    " the point where netrw actually edits the (local) file
-    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
-    if a:islocal
-"     call Decho("edit local file: exe e! ".escape(dirname,g:netrw_cd_escape))
-     exe "e! ".escape(dirname,g:netrw_cd_escape)
-     let dolockout= 1
-    else
-"     call Decho("remote file: NetrwBrowse will edit it")
-     let dolockout= 1
-    endif
-   endif
-
-  elseif newdir =~ '^/'
-   " ---------------------------------
-   " just go to the new directory spec
-   " ---------------------------------
-"   call Decho('case "just go to new directory spec": newdir<'.newdir.'>')
-   let dirname= newdir
-   call s:SetRexDir(a:islocal,dirname)
-   call s:NetrwOptionRestore("s:")
-
-  elseif newdir == './'
-   " --------------------------
-   " refresh the directory list
-   " --------------------------
-"   call Decho('case "refresh directory listing": newdir == "./"')
-   call s:SetRexDir(a:islocal,dirname)
-
-  elseif newdir == '../'
-   " -------------------
-   " go up one directory
-   " -------------------
-"   call Decho('case "go up one directory": newdir == "../"')
-
-   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-    " force a refresh
-"    call Decho("clear buffer<".expand("%")."> with :%d")
-    setlocal noro ma
-"    call Decho("setlocal noro ma")
-    keepjumps %d
-   endif
-
-   if has("amiga")
-    " amiga
-"    call Decho('case "go up one directory": newdir == "../" and amiga')
-    if a:islocal
-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
-     let dirname= substitute(dirname,'/$','','')
-    else
-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
-    endif
-"    call Decho("amiga: dirname<".dirname."> (go up one dir)")
-
-   else
-    " unix or cygwin
-"    call Decho('case "go up one directory": newdir == "../" and unix or cygwin')
-    if a:islocal
-     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
-     if dirname == ""
-      let dirname= '/'
-     endif
-    else
-     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
-    endif
-"    call Decho("unix: dirname<".dirname."> (go up one dir)")
-   endif
-   call s:SetRexDir(a:islocal,dirname)
-
-  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-"   call Decho('case liststyle is TREELIST and w:netrw_treedict exists')
-   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
-   setlocal noro ma
-"   call Decho("setlocal noro ma")
-   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
-"    call Decho("clear buffer<".expand("%")."> with :%d")
-    keepjumps %d
-   endif
-   let treedir      = s:NetrwTreeDir()
-   let s:treecurpos = nbcd_curpos
-   let haskey= 0
-"   call Decho("w:netrw_treedict<".string(w:netrw_treedict).">")
-
-   " search treedict for tree dir as-is
-   if has_key(w:netrw_treedict,treedir)
-"    call Decho('....searched for treedir<'.treedir.'> : found it!')
-    let haskey= 1
-   else
-"    call Decho('....searched for treedir<'.treedir.'> : not found')
-   endif
-
-   " search treedict for treedir with a / appended
-   if !haskey && treedir !~ '/$'
-    if has_key(w:netrw_treedict,treedir."/")
-     let treedir= treedir."/"
-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
-     let haskey = 1
-    else
-"     call Decho('....searched for treedir<'.treedir.'/> : not found')
-    endif
-   endif
-
-   " search treedict for treedir with any trailing / elided
-   if !haskey && treedir =~ '/$'
-    let treedir= substitute(treedir,'/$','','')
-    if has_key(w:netrw_treedict,treedir)
-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
-     let haskey = 1
-    else
-"     call Decho('....searched for treedir<'.treedir.'> : not found')
-    endif
-   endif
-
-   if haskey
-    " close tree listing for selected subdirectory
-"    call Decho("closing selected subdirectory<".dirname.">")
-    call remove(w:netrw_treedict,treedir)
-"    call Decho("removed     entry<".dirname."> from treedict")
-"    call Decho("yielding treedict<".string(w:netrw_treedict).">")
-    let dirname= w:netrw_treetop
-   else
-    " go down one directory
-    let dirname= substitute(treedir,'/*$','/','')
-"    call Decho("go down one dir: treedir<".treedir.">")
-   endif
-   call s:SetRexDir(a:islocal,dirname)
-
-  else
-   " go down one directory
-   let dirname= s:ComposePath(dirname,newdir)
-"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
-   call s:SetRexDir(a:islocal,dirname)
-  endif
-
-  call s:NetrwOptionRestore("s:")
-  if dolockout
-"   call Decho("doing modification lockout settings: ma nomod noro")
-   setlocal ma nomod noro
-"   call Decho("setlocal ma nomod noro")
-  endif
-
-"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
-  return dirname
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwBrowseX:  allows users to write custom functions to operate on {{{2
-"              files given their extension.  Passes 0=local, 1=remote
-fun! netrw#NetrwBrowseX(fname,remote)
-"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
-
-  " set up the filename
-  " (lower case the extension, make a local copy of a remote file)
-  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
-  if has("win32") || has("win95") || has("win64") || has("win16")
-   let exten= substitute(exten,'^.*$','\L&\E','')
-  endif
-  let fname= escape(a:fname,"%#")
-"  call Decho("fname<".fname."> after escape()")
-
-  " seems kde systems often have gnome-open due to dependencies, even though
-  " gnome-open's subsidiary display tools are largely absent.  Kde systems
-  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
-  if !exists("s:haskdeinit")
-   if has("unix")
-    let s:haskdeinit= s:System("system",'ps -e') =~ 'kdeinit'
-    if v:shell_error
-     let s:haskdeinit = 0
-    endif
-   else
-    let s:haskdeinit= 0
-   endif
-"   call Decho("setting s:haskdeinit=".s:haskdeinit)
-  endif
-
-  if a:remote == 1
-   " create a local copy
-   let fname= fnamemodify(tempname(),":r").".".exten
-"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname."> as <".fname.">")
-   exe "silent keepjumps bot 1new ".a:fname
-   setlocal bh=delete
-"   call Decho("read <".fname.">, now writing: exe w! ".fname)
-   exe "silent! w! ".fname
-   q
-  endif
-"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
-
-  " set up redirection
-  if &srr =~ "%s"
-   if (has("win32") || has("win95") || has("win64") || has("win16"))
-    let redir= substitute(&srr,"%s","nul","")
-   else
-    let redir= substitute(&srr,"%s","/dev/null","")
-   endif
-  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
-   let redir= &srr . "nul"
-  else
-   let redir= &srr . "/dev/null"
-  endif
-"  call Decho("redir{".redir."} srr{".&srr."}")
-
-  " extract any viewing options.  Assumes that they're set apart by quotes.
-  if exists("g:netrw_browsex_viewer")
-   if g:netrw_browsex_viewer =~ '\s'
-    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
-    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
-    let oviewer = ''
-    let cnt     = 1
-    while !executable(viewer) && viewer != oviewer
-     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
-     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
-     let cnt     = cnt + 1
-     let oviewer = viewer
-"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
-    endwhile
-   else
-    let viewer  = g:netrw_browsex_viewer
-    let viewopt = ""
-   endif
-"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
-  endif
-
-  " execute the file handler
-  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-   let ret= netrwFileHandlers#Invoke(exten,fname)
-
-  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-"   call Decho("exe silent !".viewer." ".viewopt.g:netrw_shq.escape(fname,'%#').g:netrw_shq.redir)
-   exe "silent !".viewer." ".viewopt.g:netrw_shq.escape(fname,'%#').g:netrw_shq.redir
-   let ret= v:shell_error
-
-  elseif has("win32") || has("win64")
-"   call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.g:netrw_shq.escape(fname, '%#').g:netrw_shq)
-   exe 'silent !start rundll32 url.dll,FileProtocolHandler '.g:netrw_shq.escape(fname, '%#').g:netrw_shq
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   let ret= v:shell_error
-
-  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
-"   call Decho("exe silent !gnome-open ".g:netrw_shq.escape(fname,'%#').g:netrw_shq." ".redir)
-   exe "silent !gnome-open ".g:netrw_shq.escape(fname,'%#').g:netrw_shq.redir
-   let ret= v:shell_error
-
-  elseif has("unix") && executable("kfmclient") && s:haskdeinit
-"   call Decho("exe silent !kfmclient exec ".g:netrw_shq.escape(fname,'%#').g:netrw_shq." ".redir)
-   exe "silent !kfmclient exec ".g:netrw_shq.escape(fname,'%#').g:netrw_shq." ".redir
-   let ret= v:shell_error
-
-  elseif has("macunix") && executable("open")
-"   call Decho("exe silent !open '".escape(fname,'%#')."' ".redir)
-   exe silent !open '".escape(fname,'%#')."' ".redir
-   let ret= v:shell_error
-
-  else
-   " netrwFileHandlers#Invoke() always returns 0
-   let ret= netrwFileHandlers#Invoke(exten,fname)
-  endif
-
-  " if unsuccessful, attempt netrwFileHandlers#Invoke()
-  if ret
-   let ret= netrwFileHandlers#Invoke(exten,fname)
-  endif
-
-"  redraw!
-
-  " cleanup: remove temporary file,
-  "          delete current buffer if success with handler,
-  "          return to prior buffer (directory listing)
-  "          Feb 12, 2008: had to de-activiate removal of
-  "          temporary file because it wasn't getting seen.
-"  if a:remote == 1 && fname != a:fname
-"   call Decho("deleting temporary file<".fname.">")
-"   call s:System("delete",fname)
-"  endif
-
-  if a:remote == 1
-   setlocal bh=delete bt=nofile
-   if g:netrw_use_noswf
-    setlocal noswf
-   endif
-   exe "norm! \<c-o>"
-"   redraw!
-  endif
-
-"  call Dret("NetrwBrowseX")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#Explore: launch the local browser in the directory of the current file {{{2
-"          dosplit==0: the window will be split iff the current file has
-"                      been modified
-"          dosplit==1: the window will be split before running the local
-"                      browser
-fun! netrw#Explore(indx,dosplit,style,...)
-"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
-  if !exists("b:netrw_curdir")
-   let b:netrw_curdir= getcwd()
-"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
-  endif
-  let curfile= b:netrw_curdir
-"  call Decho("curfile<".curfile.">")
-
-  " save registers
-  silent! let keepregstar = @*
-  silent! let keepregplus = @+
-  silent! let keepregslash= @/
-
-  " if dosplit or file has been modified
-  if a:dosplit || &modified || a:style == 6
-"   call Decho("case: dosplit=".a:dosplit." modified=".&modified." a:style=".a:style)
-   call s:SaveWinVars()
-
-   if a:style == 0      " Explore, Sexplore
-"    call Decho("style=0: Explore or Sexplore")
-    exe g:netrw_winsize."wincmd s"
-
-   elseif a:style == 1  "Explore!, Sexplore!
-"    call Decho("style=1: Explore! or Sexplore!")
-    exe g:netrw_winsize."wincmd v"
-
-   elseif a:style == 2  " Hexplore
-"    call Decho("style=2: Hexplore")
-    exe "bel ".g:netrw_winsize."wincmd s"
-
-   elseif a:style == 3  " Hexplore!
-"    call Decho("style=3: Hexplore!")
-    exe "abo ".g:netrw_winsize."wincmd s"
-
-   elseif a:style == 4  " Vexplore
-"    call Decho("style=4: Vexplore")
-    exe "lefta ".g:netrw_winsize."wincmd v"
-
-   elseif a:style == 5  " Vexplore!
-"    call Decho("style=5: Vexplore!")
-    exe "rightb ".g:netrw_winsize."wincmd v"
-
-   elseif a:style == 6  " Texplore
-    call s:SaveBufVars()
-"    call Decho("style  = 6: Texplore")
-    tabnew
-    call s:RestoreBufVars()
-   endif
-   call s:RestoreWinVars()
-  endif
-  norm! 0
-
-  if a:0 > 0
-"   call Decho("case [a:0=".a:0."]>0: a:1<".a:1.">")
-   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
-    let dirname= substitute(a:1,'\~',expand("$HOME"),'')
-"    call Decho("using dirname<".dirname.">  (case: ~ && unix||cygwin)")
-   elseif a:1 == '.'
-    let dirname= exists("b:netrw_curdir")? b:netrw_curdir : getcwd()
-    if dirname !~ '/$'
-     let dirname= dirname."/"
-    endif
-"    call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
-   elseif a:1 =~ '\$'
-    let dirname= expand(a:1)
-   else
-    let dirname= a:1
-"    call Decho("using dirname<".dirname.">")
-   endif
-  else
-   " clear explore
-"   call Decho("clearing explore variables")
-   2match none
-   if exists("s:explore_match")        |unlet s:explore_match        |endif
-   if exists("s:explore_indx")         |unlet s:explore_indx         |endif
-   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
-   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
-   if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
-   if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
-   if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
-   if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
-"   redraw!
-   echo " "
-   echo " "
-"   call Dret("netrw#Explore : cleared list")
-   return
-  endif
-
-  if dirname =~ '/\*\*/'
-   " handle .../**/.../filepat
-"   call Decho("case Explore .../**/.../filepat")
-   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
-   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
-    let b:netrw_curdir = prefixdir
-   else
-    let b:netrw_curdir= getcwd().'/'.prefixdir
-   endif
-   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
-   let starpat= 4;
-"   call Decho("pwd<".getcwd()."> dirname<".dirname.">")
-"   call Decho("case Explore ../**/../filepat (starpat=".starpat.")")
-
-  elseif dirname =~ '^\*//'
-   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
-"   call Decho("case Explore *//pattern")
-   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
-   let starpat= 1
-"   call Decho("Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
-   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-
-  elseif dirname =~ '^\*\*//'
-   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
-"   call Decho("case Explore **//pattern")
-   let pattern= substitute(dirname,'^\*\*//','','')
-   let starpat= 2
-"   call Decho("Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
-
-  elseif dirname =~ '^\*/'
-   " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-   let starpat= 3
-"   call Decho("case Explore */filepat (starpat=".starpat.")")
-
-  elseif dirname=~ '^\*\*/'
-   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-   let starpat= 4
-"   call Decho("case Explore **/filepat (starpat=".starpat.")")
-  else
-   let starpat= 0
-  endif
-
-  if starpat == 0 && a:indx >= 0
-   " [Explore Hexplore Vexplore Sexplore] [dirname]
-"   call Decho("case dirname<".dirname."> a:indx=".a:indx.": Explore Hexplore Vexplore Sexplore")
-   if dirname == ""
-    let dirname= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
-   endif
-   if dirname =~ '^scp:' || dirname =~ '^ftp:'
-"    call Decho("calling NetrwBrowse(0,dirname<".dirname.">)")
-    call s:NetrwBrowse(0,dirname)
-   else
-    if dirname == ""|let dirname= getcwd()|endif
-"    call Decho("calling LocalBrowseCheck(dirname<".dirname.">)")
-    call netrw#LocalBrowseCheck(dirname)
-   endif
-
-"   call Decho("curfile<".curfile.">")
-   if has("win32") || has("win95") || has("win64") || has("win16")
-    call search('\<'.substitute(curfile,'^.*[/\\]','','e').'\>','cW')
-   else
-    call search('\<'.substitute(curfile,'^.*/','','e').'\>','cW')
-   endif
-
-  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-  elseif a:indx <= 0
-   " Nexplore, Pexplore, Explore: handle starpat
-"   call Decho("case Nexplore, Pexplore, <s-down>, <s-up>: starpat=".starpat." a:indx=".a:indx)
-   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
-"    call Decho("set up <s-up> and <s-down> maps")
-    let s:didstarstar= 1
-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
-   endif
-
-   if has("path_extra")
-"    call Decho("starpat=".starpat.": has +path_extra")
-    if !exists("w:netrw_explore_indx")
-     let w:netrw_explore_indx= 0
-    endif
-    let indx = a:indx
-"    call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]")
-"
-    if indx == -1
-     " Nexplore
-"     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
-      silent! let @* = keepregstar
-      silent! let @+ = keepregstar
-      silent! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("indx=".indx." curfile<".curfile.">")
-     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
-      let indx= indx + 1
-"      call Decho("indx=".indx." (Nexplore while loop)")
-     endwhile
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-"     call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    elseif indx == -2
-     " Pexplore
-"     call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
-      silent! let @* = keepregstar
-      silent! let @+ = keepregstar
-      silent! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("indx=".indx." curfile<".curfile.">")
-     while indx >= 0 && curfile == w:netrw_explore_list[indx]
-      let indx= indx - 1
-"      call Decho("indx=".indx." (Pexplore while loop)")
-     endwhile
-     if indx < 0                        | let indx= 0                           | endif
-"     call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    else
-     " Explore -- initialize
-     " build list of files to Explore with Nexplore/Pexplore
-"     call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")")
-     let w:netrw_explore_indx= 0
-     if !exists("b:netrw_curdir")
-      let b:netrw_curdir= getcwd()
-     endif
-"     call Decho("starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
-
-     " switch on starpat to build the w:netrw_explore_list of files
-     if starpat == 1
-      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-"      call Decho("starpat=".starpat.": build *//pattern list")
-      exe "vimgrep /".pattern."/gj ".b:netrw_curdir."/*"
-      let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)')
-      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-
-     elseif starpat == 2
-      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-"      call Decho("starpat=".starpat.": build **//pattern list")
-      try
-       exe "silent vimgrep /".pattern."/gj "."**/*"
-      catch /^Vim\%((\a\+)\)\=:E480/
-      	call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
-       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-       silent! let @* = keepregstar
-       silent! let @+ = keepregstar
-       silent! let @/ = keepregslash
-"       call Dret("netrw#Explore : no files matched pattern")
-       return
-      endtry
-      let s:netrw_curdir       = b:netrw_curdir
-      let w:netrw_explore_list = getqflist()
-      let w:netrw_explore_list = map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)')
-
-     elseif starpat == 3
-      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-"      call Decho("starpat=".starpat.": build */filepat list")
-      let dirname             = substitute(dirname,'^\*/','','')
-      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
-      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
-
-     elseif starpat == 4
-      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-"      call Decho("starpat=".starpat.": build **/filepat list")
-      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
-      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
-     endif " switch on starpat to build w:netrw_explore_list
-
-     let w:netrw_explore_listlen = len(w:netrw_explore_list)
-"     call Decho("w:netrw_explore_list<".string(w:netrw_explore_list).">")
-"     call Decho("w:netrw_explore_listlen=".w:netrw_explore_listlen)
-
-     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
-      call netrw#ErrorMsg(s:WARNING,"no files matched",42)
-      silent! let @* = keepregstar
-      silent! let @+ = keepregstar
-      silent! let @/ = keepregslash
-"      call Dret("netrw#Explore : no files matched")
-      return
-     endif
-    endif  " if indx ... endif
-
-    " NetrwStatusLine support - for exploring support
-    let w:netrw_explore_indx= indx
-"    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
-
-    " wrap the indx around, but issue a note
-    if indx >= w:netrw_explore_listlen || indx < 0
-"     call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
-     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
-     let w:netrw_explore_indx= indx
-     call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
-     sleep 1
-    endif
-
-    exe "let dirfile= w:netrw_explore_list[".indx."]"
-"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
-    let newdir= substitute(dirfile,'/[^/]*$','','e')
-"    call Decho("newdir<".newdir.">")
-
-"    call Decho("calling LocalBrowseCheck(newdir<".newdir.">)")
-    call netrw#LocalBrowseCheck(newdir)
-    if !exists("w:netrw_liststyle")
-     let w:netrw_liststyle= g:netrw_liststyle
-    endif
-    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
-     call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
-    else
-     call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
-    endif
-    let w:netrw_explore_mtchcnt = indx + 1
-    let w:netrw_explore_bufnr   = bufnr("%")
-    let w:netrw_explore_line    = line(".")
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
-"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
-
-   else
-"    call Decho("your vim does not have +path_extra")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
-    endif
-    silent! let @* = keepregstar
-    silent! let @+ = keepregstar
-    silent! let @/ = keepregslash
-"    call Dret("netrw#Explore : missing +path_extra")
-    return
-   endif
-
-  else
-"   call Decho("case Explore newdir<".dirname.">")
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
-    silent! unlet w:netrw_treedict
-    silent! unlet w:netrw_treetop
-   endif
-   let newdir= dirname
-   if !exists("b:netrw_curdir")
-    call netrw#LocalBrowseCheck(getcwd())
-   else
-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
-   endif
-  endif
-
-  " visual display of **/ **// */ Exploration files
-  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
-   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
-    " only update match list if current directory isn't the same as before
-    let s:explore_prvdir = b:netrw_curdir
-    let s:explore_match  = ""
-    let dirlen           = strlen(b:netrw_curdir)
-    if b:netrw_curdir !~ '/$'
-     let dirlen= dirlen + 1
-    endif
-    let prvfname= ""
-    for fname in w:netrw_explore_list
-"     call Decho("fname<".fname.">")
-     if fname =~ '^'.b:netrw_curdir
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
-      endif
-     elseif fname !~ '^/' && fname != prvfname
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
-      endif
-     endif
-     let prvfname= fname
-    endfor
-"    call Decho("explore_match<".s:explore_match.">")
-    exe "2match netrwMarkFile /".s:explore_match."/"
-   endif
-   echo "<s-up>==Pexplore  <s-down>==Nexplore"
-  else
-   2match none
-   if exists("s:explore_match")  | unlet s:explore_match  | endif
-   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
-   echo " "
-"   call Decho("cleared explore match list")
-  endif
-
-  silent! let @* = keepregstar
-  silent! let @+ = keepregstar
-  silent! let @/ = keepregslash
-"  call Dret("netrw#Explore : @/<".@/.">")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwHide: this function is invoked by the "a" map for browsing {{{2
-"          and switches the hiding mode.  The actual hiding is done by
-"          s:NetrwListHide().
-"             g:netrw_hide= 0: show all
-"                           1: show not-hidden files
-"                           2: show hidden files only
-fun! s:NetrwHide(islocal)
-"  call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide)
-  let svpos= netrw#NetrwSavePosn()
-
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-"   call Decho(((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">")
-"   call Decho("g:netrw_list_hide<".g:netrw_list_hide.">")
-
-   " hide the files in the markfile list
-   for fname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk)
-    if match(g:netrw_list_hide,'\<'.fname.'\>') != -1
-     " remove fname from hiding list
-     let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','')
-     let g:netrw_list_hide= substitute(g:netrw_list_hide,',,',',','g')
-     let g:netrw_list_hide= substitute(g:netrw_list_hide,'^,\|,$','','')
-"     call Decho("unhide: g:netrw_list_hide<".g:netrw_list_hide.">")
-    else
-     " append fname to hiding list
-     if exists("g:netrw_list_hide") && g:netrw_list_hide != ""
-      let g:netrw_list_hide= g:netrw_list_hide.',\<'.escape(fname,g:netrw_fname_escape).'\>'
-     else
-      let g:netrw_list_hide= '\<'.escape(fname,g:netrw_fname_escape).'\>'
-     endif
-"     call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">")
-    endif
-   endfor
-   unlet s:netrwmarkfilelist_{bufnr("%")}
-   unlet s:netrwmarkfilemtch_{bufnr("%")}
-   2match none
-   let g:netrw_hide= 1
-
-  else
-
-   " switch between show-all/show-not-hidden/show-hidden
-   let g:netrw_hide=(g:netrw_hide+1)%3
-   exe "norm! 0"
-   if g:netrw_hide && g:netrw_list_hide == ""
-    call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
-"    call Dret("NetrwHide")
-    return
-   endif
-  endif
-
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-"  call Dret("NetrwHide")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwHidden: invoked by "gh" {{{2
-fun! s:NetrwHidden(islocal)
-"  call Dfunc("s:NetrwHidden()")
-  "  save current position
-  let svpos= netrw#NetrwSavePosn()
-
-  if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+'
-   " remove pattern from hiding list
-   let g:netrw_list_hide= substitute(g:netrw_list_hide,'\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+','','')
-  elseif strlen(g:netrw_list_hide) >= 1
-   let g:netrw_list_hide= g:netrw_list_hide . ',\(^\|\s\s\)\zs\.\S\+'
-  else
-   let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
-  endif
-
-  " refresh screen and return to saved position
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-"  call Dret("s:NetrwHidden")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
-fun! s:NetrwLeftmouse(islocal)
-"  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
-  if a:islocal
-   if exists("b:netrw_curdir")
-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
-   endif
-  else
-   if exists("b:netrw_curdir")
-    call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
-   endif
-  endif
-"  call Dret("s:NetrwLeftmouse")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
-" separated patterns given in g:netrw_list_hide
-fun! s:NetrwListHide()
-"  call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
-
-  " find a character not in the "hide" string to use as a separator for :g and :v commands
-  " How-it-works: take the hiding command, convert it into a range.  Duplicate
-  " characters don't matter.  Remove all such characters from the '/~...90'
-  " string.  Use the first character left as a separator character.
-  let listhide= g:netrw_list_hide
-  let sep     = strpart(substitute('/~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1)
-"  call Decho("sep=".sep)
-
-  while listhide != ""
-   if listhide =~ ','
-    let hide     = substitute(listhide,',.*$','','e')
-    let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
-   else
-    let hide     = listhide
-    let listhide = ""
-   endif
-
-   " Prune the list by hiding any files which match
-   if g:netrw_hide == 1
-"    call Decho("hiding<".hide."> listhide<".listhide.">")
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
-   elseif g:netrw_hide == 2
-"    call Decho("showing<".hide."> listhide<".listhide.">")
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
-   endif
-  endwhile
-  if g:netrw_hide == 2
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
-  endif
-
-"  call Dret("NetrwListHide")
-endfun
-
-" ---------------------------------------------------------------------
-" NetrwHideEdit: allows user to edit the file/directory hiding list
-fun! s:NetrwHideEdit(islocal)
-"  call Dfunc("NetrwHideEdit(islocal=".a:islocal.")")
-
-  " save current cursor position
-  let svpos= netrw#NetrwSavePosn()
-
-  " get new hiding list from user
-  call inputsave()
-  let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
-  call inputrestore()
-  let g:netrw_list_hide= newhide
-"  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
-
-  " refresh the listing
-  silent call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
-
-  " restore cursor position
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("NetrwHideEdit")
-endfun
-
-" ---------------------------------------------------------------------
-" NetSortSequence: allows user to edit the sorting sequence
-fun! s:NetSortSequence(islocal)
-"  call Dfunc("NetSortSequence(islocal=".a:islocal.")")
-
-  let svpos= netrw#NetrwSavePosn()
-  call inputsave()
-  let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
-  call inputrestore()
-
-  " refresh the listing
-  let g:netrw_sort_sequence= newsortseq
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("NetSortSequence")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMakeDir: this function makes a directory (both local and remote) {{{2
-fun! s:NetrwMakeDir(usrhost)
-"  call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)")
-
-  " get name of new directory from user.  A bare <CR> will skip.
-  " if its currently a directory, also request will be skipped, but with
-  " a message.
-  call inputsave()
-  let newdirname= input("Please give directory name: ")
-  call inputrestore()
-"  call Decho("newdirname<".newdirname.">")
-
-  if newdirname == ""
-"   call Dret("NetrwMakeDir : user aborted with bare <cr>")
-   return
-  endif
-
-  if a:usrhost == ""
-
-   " Local mkdir:
-   " sanity checks
-   let fullnewdir= b:netrw_curdir.'/'.newdirname
-"   call Decho("fullnewdir<".fullnewdir.">")
-   if isdirectory(fullnewdir)
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
-    endif
-"    call Dret("NetrwMakeDir : directory<".newdirname."> exists previously")
-    return
-   endif
-   if s:FileReadable(fullnewdir)
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
-    endif
-"    call Dret("NetrwMakeDir : file<".newdirname."> exists previously")
-    return
-   endif
-
-   " requested new local directory is neither a pre-existing file or
-   " directory, so make it!
-   if exists("*mkdir")
-    call mkdir(fullnewdir,"p")
-   else
-    let netrw_origdir= s:NetrwGetcwd(1)
-    exe 'keepjumps cd '.b:netrw_curdir
-"    call Decho("netrw_origdir<".netrw_origdir.">: cd b:netrw_curdir<".b:netrw_curdir.">")
-"    call Decho("exe silent! !".g:netrw_local_mkdir.' '.g:netrw_shq.newdirname.g:netrw_shq)
-    exe "silent! !".g:netrw_local_mkdir.' '.g:netrw_shq.newdirname.g:netrw_shq
-    if !g:netrw_keepdir
-     exe 'keepjumps cd '.netrw_origdir
-"     call Decho("netrw_keepdir=".g:netrw_keepdir.": cd ".netrw_origdir." getcwd<".getcwd().">")
-    endif
-   endif
-
-   if v:shell_error == 0
-    " refresh listing
-"    call Decho("refresh listing")
-    let svpos= netrw#NetrwSavePosn()
-    call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-    call netrw#NetrwRestorePosn(svpos)
-   elseif !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26)
-   endif
-"   redraw!
-
-  else
-   " Remote mkdir:
-   let mkdircmd  = s:MakeSshCmd(g:netrw_mkdir_cmd)
-   let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
-"   call Decho("exe silent! !".mkdircmd." ".g:netrw_shq.newdirname.g:netrw_shq)
-   exe "silent! !".mkdircmd." ".g:netrw_shq.newdirname.g:netrw_shq
-   if v:shell_error == 0
-    " refresh listing
-    let svpos= netrw#NetrwSavePosn()
-    call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-    call netrw#NetrwRestorePosn(svpos)
-   elseif !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
-   endif
-"   redraw!
-  endif
-
-"  call Dret("NetrwMakeDir")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFile: (invoked by mf) This function is used to both {{{2
-"                  mark and unmark files.  If a markfile list exists,
-"                  then the rename and delete functions will use it instead
-"                  of whatever may happen to be under the cursor at that
-"                  moment.  When the mouse and gui are available,
-"                  shift-leftmouse may also be used to mark files.
-fun! s:NetrwMarkFile(islocal,fname)
-"  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
-  let curbufnr= bufnr("%")
-  let curdir  = b:netrw_curdir
-  if exists("s:netrwmarkfilelist_{curbufnr}")
-   " markfile list exists
-"   call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
-"   call Decho("starting s:netrwmarkfilemtch_{curbufnr}<".s:netrwmarkfilemtch_{curbufnr}.">")
-
-   if index(s:netrwmarkfilelist_{curbufnr},a:fname) == -1
-    " append filename to local-directory markfilelist
-"    call Decho("append filename<".a:fname."> to local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
-    call add(s:netrwmarkfilelist_{curbufnr},a:fname)
-    let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
-
-   else
-    " remove filename from local markfilelist
-"    call Decho("remove filename<".a:fname."> from local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
-    call filter(s:netrwmarkfilelist_{curbufnr},'v:val != a:fname')
-    if s:netrwmarkfilelist_{curbufnr} == []
-     " local markfilelist is empty; remove it entirely
-"     call Decho("markfile list now empty, unlet s:netrwmarkfilelist_".curbufnr." and ...mtch_".curbufnr)
-     call s:NetrwUnmarkList(curbufnr,curdir)
-    else
-     " rebuild match list to display markings correctly
-"     call Decho("rebuild s:netrwmarkfilemtch_".curbufnr)
-     let s:netrwmarkfilemtch_{curbufnr}= ""
-     let first                           = 1
-     for fname in s:netrwmarkfilelist_{curbufnr}
-      if first
-       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
-      else
-       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
-      endif
-      let first= 0
-     endfor
-"     call Decho("ending s:netrwmarkfilelist_"curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
-"     call Decho("ending s:netrwmarkfilemtch_"curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
-    endif
-   endif
-
-  else
-   " initialize new markfilelist
-
-"   call Decho("add fname<".a:fname."> to new markfilelist_".curbufnr)
-   let s:netrwmarkfilelist_{curbufnr}= []
-   call add(s:netrwmarkfilelist_{curbufnr},a:fname)
-"   call Decho("ending s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
-
-   " build initial markfile matching pattern
-   if a:fname =~ '/$'
-    let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc)
-   else
-    let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).'\>'
-   endif
-"   call Decho("ending s:netrwmarkfilemtch_".curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
-  endif
-
-  " handle global markfilelist
-  if exists("s:netrwmarkfilelist")
-   let dname= s:ComposePath(b:netrw_curdir,a:fname)
-   if index(s:netrwmarkfilelist,dname) == -1
-    " append new filename to global markfilelist
-    call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname))
-"    call Decho("append filename<".a:fname."> to global markfilelist<".string(s:netrwmarkfilelist).">")
-   else
-    " remove new filename from global markfilelist
-"    call Decho("filter(".string(s:netrwmarkfilelist).",'v:val != '.".dname.")")
-    call filter(s:netrwmarkfilelist,'v:val != "'.dname.'"')
-"    call Decho("ending s:netrwmarkfilelist  <".string(s:netrwmarkfilelist).">")
-    if s:netrwmarkfilelist == []
-     unlet s:netrwmarkfilelist
-    endif
-   endif
-  else
-   " initialize new global-directory markfilelist
-   let s:netrwmarkfilelist= []
-   call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname))
-"   call Decho("init s:netrwmarkfilelist<".string(s:netrwmarkfilelist).">")
-  endif
-
-  " set up 2match'ing to netrwmarkfilemtch list
-  if exists("s:netrwmarkfilemtch_{curbufnr}") && s:netrwmarkfilemtch_{curbufnr} != ""
-"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/"
-  else
-"   call Decho("2match none")
-   2match none
-  endif
-"  call Dret("s:NetrwMarkFile : netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileCompress: (invoked by mz) This function is used to {{{2
-"                          compress/decompress files using the programs
-"                          in g:netrw_compress and g:netrw_uncompress,
-"                          using g:netrw_compress_suffix to know which to
-"                          do.  By default:
-"                            g:netrw_compress        = "gzip"
-"                            g:netrw_decompress      = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
-fun! s:NetrwMarkFileCompress(islocal)
-"  call Dfunc("s:NetrwMarkFileCompress(islocal=".a:islocal.")")
-  let svpos    = netrw#NetrwSavePosn()
-  let curdir   = b:netrw_curdir
-  let curbufnr = bufnr("%")
-
-  if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress")
-   for fname in s:netrwmarkfilelist_{curbufnr}
-    " for every filename in the marked list
-    for sfx in sort(keys(g:netrw_decompress))
-     if fname =~ '\'.sfx.'$'
-      " fname has a suffix indicating that its compressed; apply associated decompression routine
-      let exe= g:netrw_decompress[sfx]
-"      call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
-      if a:islocal
-       if g:netrw_keepdir
-        let fname= s:ComposePath(curdir,fname)
-       endif
-      else
-       let fname= b:netrw_curdir.fname
-      endif
-      if executable(exe)
-       if a:islocal
-	call system(exe." ".fname)
-       else
-        call s:RemoteSystem(exe." ".fname)
-       endif
-      else
-       call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
-      endif
-      break
-     endif
-    endfor
-    if exists("exe")
-     unlet exe
-    elseif a:islocal
-     " fname not a compressed file, so compress it
-     call system(g:netrw_compress." ".s:ComposePath(b:netrw_curdir,fname))
-    else
-     " fname not a compressed file, so compress it
-     call s:RemoteSystem(g:netrw_compress." ".fname)
-    endif
-   endfor
-   call s:NetrwUnmarkList(curbufnr,curdir)
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
-  endif
-"  call Dret("s:NetrwMarkFileCompress")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileCopy: (invoked by mc) copy marked files to target {{{2
-"                      If no marked files, then set up directory as the
-"                      target.  Currently does not support copying entire
-"                      directories.  Uses the global marked file list.
-"                      Returns 1=success  (used by NetrwMarkFileMove())
-"                              0=failure
-fun! s:NetrwMarkFileCopy(islocal)
-"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">")
-
-  " s:netrwmarkfilelist_{bufnr("%")}: the List of marked files
-  let curbufnr= bufnr("%")
-  if exists("s:netrwmarkfilelist")
-"   call Decho("s:netrwmarkfilelist<".string(s:netrwmarkfilelist).">")
-   let svpos  = netrw#NetrwSavePosn()
-   let curdir = b:netrw_curdir
-
-   " s:netrwmftgt : name of directory to copy files to
-   " s:netrwmfloc : =0 target directory is remote
-   "                =1 target directory is local
-   if exists("s:netrwmftgt") && exists("s:netrwmfloc")
-"    call Decho("s:netrwmftgt<".s:netrwmftgt.">")
-"    call Decho("s:netrwmfloc=".s:netrwmfloc)
-
-    for fname in s:netrwmarkfilelist
-"     call Decho("s:NetrwMarkFileCopy: fname<".fname.">")
-
-     " sanity check
-     if (a:islocal && isdirectory(fname)) || (!a:islocal && fname =~ '/$')
-      call netrw#ErrorMsg(s:ERROR,"currently netrw can't copy entire directories such as <".fname.">",58)
-"      call Dret("s:NetrwMarkFileCopy 0 : currently netrw can't copy entire directories")
-      return 0
-     endif
-
-     if  a:islocal &&  s:netrwmfloc
-      " local to local copy
-"      call Decho("local to local copy")
-"      call Decho("from b:netrw_curdir<".b:netrw_curdir."> fname<".fname."> to s:netrwmftgt<".s:netrwmftgt.">")
-      if executable(g:netrw_localcopycmd)
-"       call Decho("let ret= system(".g:netrw_localcopycmd." ".s:ComposePath(b:netrw_curdir,fname)." ".s:netrwmftgt.")")
-       let ret= system(g:netrw_localcopycmd." "." ".s:netrwmftgt) " global markfilelist verison
-       if v:shell_error < 0
-	call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localcopycmd."> failed, aborting",54)
-        break
-       endif
-      else
-       call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localcopycmd."> is not executable!",57)
-       break
-      endif
-
-     elseif !a:islocal &&  s:netrwmfloc
-      " remote to local copy
-"      call Decho("remote to local copy")
-"      call Decho("getcwd<".getcwd()."> b:netrw_curdir<".b:netrw_curdir.">")
-      call netrw#NetrwObtain(a:islocal,fname,s:netrwmftgt)
-
-     elseif  a:islocal && !s:netrwmfloc
-      " local to remote copy
-"      call Decho("local to remote copy")
-"      call Decho("getcwd<".getcwd()."> b:netrw_curdir<".b:netrw_curdir.">")
-      call s:NetrwUpload(fname,s:netrwmftgt)
-
-     else
-      " remote to remote copy
-"      call Decho("remote to remote copy")
-      call s:NetrwUpload(fname,s:netrwmftgt)
-     endif
-    endfor
-
-    " unmark all marked file lists
-    call s:NetrwUnmarkAll()
-   else
-    call netrw#ErrorMsg(s:ERROR,"missing a markfile copy target! (see help for netrw-mt)",56)
-   endif
-
-   " refresh the listing
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
-  else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
-  endif
-  
-"  call Dret("s:NetrwMarkFileCopy 1")
-  return 1
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileDiff: (invoked by md) This function is used to {{{2
-"                      invoke vim's diff mode on the marked files.
-"                      Either two or three files can be so handled.
-"                      Uses the global marked file list.
-fun! s:NetrwMarkFileDiff(islocal)
-"  call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
-  let curbufnr= bufnr("%")
-  if exists("s:netrwmarkfilelist_{curbufnr}")
-
-   let cnt    = 0
-   let curdir = b:netrw_curdir
-   for fname in s:netrwmarkfilelist
-    let cnt= cnt + 1
-    if !a:islocal
-     let fname= curdir.fname
-    endif
-    if cnt == 1
-"     call Decho("diffthis: ".fname)
-     exe "e ".fname
-     diffthis
-    elseif cnt == 2 || cnt == 3
-     vsplit
-     wincmd l
-"     call Decho("diffthis: ".fname)
-     exe "e ".fname
-     diffthis
-    else
-     break
-    endif
-   endfor
-   call s:NetrwUnmarkList(curbufnr,curdir)
-  endif
-"  call Dret("s:NetrwMarkFileDiff")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileEdit: (invoked by me) put marked files on arg list and start editing them {{{2
-"                       Uses global markfilelist
-fun! s:NetrwMarkFileEdit(islocal)
-"  call Dfunc("s:NetrwMarkFileEdit(islocal=".a:islocal.")")
-
-  let curdir   = b:netrw_curdir
-  let curbufnr = bufnr("%")
-  if exists("s:netrwmarkfilelist_{curbufnr}")
-   call s:SetRexDir(a:islocal,curdir)
-   if a:islocal && g:netrw_keepdir
-    " use complete paths if its local and keepdir enabled
-    let flist= ""
-    for fname in s:netrwmarkfilelist
-"     let flist= flist." ".s:ComposePath(curdir,fname)
-     let flist= flist." ".fname
-    endfor
-   else
-"    let flist= substitute(escape(join(s:netrwmarkfilelist_{curbufnr},"\t"),' '),"\t",' ','g')
-    let flist= substitute(escape(join(s:netrwmarkfilelist,"\t"),' '),"\t",' ','g')
-   endif
-   " unmark markedfile list
-"   call s:NetrwUnmarkList(curbufnr,curdir)
-   call s:NetrwUnmarkAll()
-"   call Decho("exe silent args ".flist)
-   exe "silent args ".flist
-  endif
-  
-"  call Dret("s:NetrwMarkFileEdit")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary command on marked files, one at a time {{{2
-"                     Uses the local marked-file list.
-fun! s:NetrwMarkFileExe(islocal)
-"  call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")")
-  let svpos    = netrw#NetrwSavePosn()
-  let curdir   = b:netrw_curdir
-  let curbufnr = bufnr("%")
-
-  if exists("s:netrwmarkfilelist_{curbufnr}")
-   " get the command
-   call inputsave()
-   let cmd= input("Enter command: ","","file")
-   call inputrestore()
-"   call Decho("cmd<".cmd.">")
-
-   " apply command to marked files.  Substitute: filename -> %
-   " If no %, then append a space and the filename to the command
-   for fname in s:netrwmarkfilelist_{curbufnr}
-    if a:islocal
-     if g:netrw_keepdir
-      let fname= s:ComposePath(curdir,fname)
-     endif
-    else
-     let fname= b:netrw_curdir.fname
-    endif
-    if cmd =~ '%'
-     let xcmd= substitute(cmd,'%',fname,'g')
-    else
-     let xcmd= cmd.' '.fname
-    endif
-    if a:islocal
-"     call Decho("local: xcmd<".xcmd.">")
-     let ret= system(xcmd)
-    else
-"     call Decho("remote: xcmd<".xcmd.">")
-     let ret= s:RemoteSystem(xcmd)
-    endif
-    if v:shell_error < 0
-     call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
-     break
-    else
-     echo ret
-    endif
-   endfor
-
-   " unmark marked file list
-   call s:NetrwUnmarkList(curbufnr,curdir)
-
-   " refresh the listing
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
-  else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
-  endif
-  
-"  call Dret("s:NetrwMarkFileExe")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkHideSfx: (invoked by mh) (un)hide files having same suffix
-"                  as the marked file(s) (toggles suffix presence)
-"                  Uses the local marked file list.
-fun! s:NetrwMarkHideSfx(islocal)
-"  call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")")
-  let svpos    = netrw#NetrwSavePosn()
-  let curbufnr = bufnr("%")
-
-  " s:netrwmarkfilelist_{curbufnr}: the List of marked files
-  if exists("s:netrwmarkfilelist_{curbufnr}")
-
-   for fname in s:netrwmarkfilelist_{curbufnr}
-"     call Decho("s:NetrwMarkFileCopy: fname<".fname.">")
-     " construct suffix pattern
-     if fname =~ '\.'
-      let sfxpat= "^.*".substitute(fname,'^.*\(\.[^. ]\+\)$','\1','')
-     else
-      let sfxpat= '^\%(\%(\.\)\@!.\)*$'
-     endif
-     " determine if its in the hiding list or not
-     let inhidelist= 0
-     if g:netrw_list_hide != ""
-      let itemnum = 0
-      let hidelist= split(g:netrw_list_hide,',')
-      for hidepat in hidelist
-       if sfxpat == hidepat
-        let inhidelist= 1
-        break
-       endif
-       let itemnum= itemnum + 1
-      endfor
-     endif
-"     call Decho("fname<".fname."> inhidelist=".inhidelist." sfxpat<".sfxpat.">")
-     if inhidelist
-      " remove sfxpat from list
-      call remove(hidelist,itemnum)
-      let g:netrw_list_hide= join(hidelist,",")
-     elseif g:netrw_list_hide != ""
-      " append sfxpat to non-empty list
-      let g:netrw_list_hide= g:netrw_list_hide.",".sfxpat
-     else
-      " set hiding list to sfxpat
-      let g:netrw_list_hide= sfxpat
-     endif
-    endfor
-
-   " refresh the listing
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
-  else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
-  endif
-
-"  call Dret("s:NetrwMarkHideSfx")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileMove: (invoked by mm) execute arbitrary command on marked files, one at a time {{{2
-"                      uses the global marked file list
-fun! s:NetrwMarkFileMove(islocal)
-"  call Dfunc("s:NetrwMarkFileMove(islocal=".a:islocal.")")
-
-  if exists("s:netrwmarkfilelist")
-   let svpos       = netrw#NetrwSavePosn()
-   let curbufnr    = bufnr("%")
-   let curdir      = b:netrw_curdir
-   if exists("s:netrwmftgt") && exists("s:netrwmfloc")
-
-    for fname in s:netrwmarkfilelist
-     let islocal= fname !~ '^\a\+://'
-"     call Decho("s:NetrwMarkFileMove: fname<".fname."> islocal=".islocal)
-     if  islocal &&  s:netrwmfloc
-      " local to local move
-      " s:netrwmfloc= 0: target directory is remote
-      "             = 1: target directory is local
-"      call Decho("local to local move")
-      if executable(g:netrw_localmovecmd)
-"       call Decho("let ret= system(".g:netrw_localmovecmd." ".fname." ".s:netrwmftgt.")")
-       let ret= system(g:netrw_localmovecmd." ".fname." ".s:netrwmftgt)
-       if v:shell_error < 0
-        call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
-        break
-       endif
-      else
-       call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57)
-       break
-      endif
-     elseif !islocal && s:netrwmfloc
-      " remote to local move
-"      call Decho("remote to local: copy and remove")
-"      call Decho("islocal     =".islocal)
-"      call Decho("fname       <".fname.">")
-"      call Decho("s:netrwmftgt<".s:netrwmftgt.">")
-      call netrw#NetrwObtain(islocal,fname,s:netrwmftgt)
-      let path      = substitute(fname,'^\(.*/\)\(.\{-}\)$','\1','')
-      let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
-      let ok= s:NetrwRemoteRmFile(path,barefname,1)
-     elseif !islocal && s:netrwmfloc
-      " local to remote move
-"      call Decho("local to remote: copy and remove")
-      call s:NetrwUpload(fname,s:netrwmftgt)
-      let path      = substitute(fname,'^\(.*/\)\(.\{-}\)$','\1','')
-      let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
-      let ok        = s:NetrwLocalRmFile(path,barefname,1)
-     else
-      " remote to remote move
-"      call Decho("remote to remote: copy and remove")
-      call s:NetrwUpload(fname,s:netrwmftgt)
-      let path      = substitute(fname,'^\(.*/\)\(.\{-}\)$','\1','')
-      let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
-      let ok        = s:NetrwRemoteRmFile(path,barefname,1)
-     endif
-    endfor
-   endif
-
-   " unmark marked file lists
-   call s:NetrwUnmarkAll()
-
-   " refresh the listing and restore cursor position
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
-  else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
-  endif
-  
-"  call Dret("s:NetrwMarkFileMove")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFilePrint: (invoked by mp) This function prints marked files {{{2
-"                       using the hardcopy command.  Local marked-file list only.
-fun! s:NetrwMarkFilePrint(islocal)
-"  call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")")
-  let curbufnr= bufnr("%")
-  if exists("s:netrwmarkfilelist_{curbufnr}")
-   let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr}
-   let curdir            = b:netrw_curdir
-   call s:NetrwUnmarkList(curbufnr,curdir)
-   for fname in netrwmarkfilelist
-    if a:islocal
-     if g:netrw_keepdir
-      let fname= s:ComposePath(curdir,fname)
-     endif
-    else
-     let fname= curdir.fname
-    endif
-    1split
-    " the autocmds will handle both local and remote files
-    exe "silent e ".fname
-"    call Decho("hardcopy ".fname)
-    hardcopy
-    q
-   endfor
-   2match none
-  endif
-"  call Dret("s:NetrwMarkFilePrint")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2
-"                        files when given a regexp (for which a prompt is
-"                        issued).
-fun! s:NetrwMarkFileRegexp(islocal)
-"  call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")")
-
-  " get the regular expression
-  call inputsave()
-  let regexp= input("Enter regexp: ","","file")
-  call inputrestore()
-
-  if a:islocal
-   " get the matching list of files using local glob()
-   let dirname  = escape(b:netrw_curdir,g:netrw_glob_escape)
-   let filelist = glob(s:ComposePath(dirname,regexp))
-   if filelist != ""
-    let filelist= filelist."\n"
-   endif
-
-  " mark the list of files
-  while filelist != ""
-   if filelist =~ '\n'
-    let filename = substitute(filelist,'\n.*$','','e')
-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
-   else
-    let filename = filelist
-    let filelist = ""
-   endif
-"   call Decho("filelist<".filelist.">")
-"   call Decho("filename<".filename.">")
-   call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
-  endwhile
-
-  else
-
-   " convert displayed listing into a filelist
-   let eikeep = &ei
-   let areg   = @a
-   silent %y a
-   set ei=all ma
-"   call Decho("set ei=all ma")
-   1split
-   enew
-   silent norm! "ap
-   2
-   let bannercnt= search('^" =====','W')
-   exe "silent 1,".bannercnt."d"
-   set bt=nofile
-   if     g:netrw_liststyle == s:LONGLIST
-    silent %s/\s\{2,}\S.*$//e
-   elseif g:netrw_liststyle == s:WIDELIST
-    silent %s/\s\{2,}/\r/ge
-   elseif g:netrw_liststyle == s:TREELIST
-    silent %s/^| //e
-    silent! g/^ .*$/d
-   endif
-   exe "silent! v/".escape(regexp,'/')."/d"
-   let filelist= getline(1,line("$"))
-   q!
-   for filename in filelist
-    call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
-   endfor
-   unlet filelist
-   let @a  = areg
-   let &ei = eikeep
-  endif
-
-"  call Dret("s:NetrwMarkFileRegexp")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileSource: (invoked by ms) This function sources marked files {{{2
-"                        Uses the local marked file list.
-fun! s:NetrwMarkFileSource(islocal)
-"  call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")")
-  let curbufnr= bufnr("%")
-  if exists("s:netrwmarkfilelist_{curbufnr}")
-   let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")}
-   let curdir            = b:netrw_curdir
-   call s:NetrwUnmarkList(curbufnr,curdir)
-   for fname in netrwmarkfilelist
-    if a:islocal
-     if g:netrw_keepdir
-      let fname= s:ComposePath(curdir,fname)
-     endif
-    else
-     let fname= curdir.fname
-    endif
-    " the autocmds will handle sourcing both local and remote files
-    exe "so ".fname
-   endfor
-   2match none
-  endif
-"  call Dret("s:NetrwMarkFileSource")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileTag: (invoked by mT) This function applies g:netrw_ctags to marked files {{{2
-"                     Uses the global markfilelist
-fun! s:NetrwMarkFileTag(islocal)
-"  call Dfunc("s:NetrwMarkFileTag(islocal=".a:islocal.")")
-  let svpos    = netrw#NetrwSavePosn()
-  let curdir   = b:netrw_curdir
-  let curbufnr = bufnr("%")
-
-  if exists("s:netrwmarkfilelist")
-"   call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
-   if a:islocal && g:netrw_keepdir
-    let netrwmarkfilelist= ""
-    for fname in s:netrwmarkfilelist
-"     let netrwmarkfilelist= netrwmarkfilelist." ".s:ComposePath(curdir,fname)
-     let netrwmarkfilelist= netrwmarkfilelist." ".fname
-    endfor
-   else
-    let netrwmarkfilelist= string(s:netrwmarkfilelist)
-    let netrwmarkfilelist= substitute(netrwmarkfilelist,'[[\],]','','g')
-   endif
-   call s:NetrwUnmarkAll()
-
-   if a:islocal
-    if executable(g:netrw_ctags)
-     if g:netrw_shq != "'"
-      let netrwmarkfilelist= substitute(netrwmarkfilelist,"'",g:netrw_shq,'g')
-     endif
-"     call Decho("call system(".g:netrw_ctags." ".netrwmarkfilelist.")")
-     call system(g:netrw_ctags." ".netrwmarkfilelist)
-    else
-     call netrw#ErrorMsg(s:ERROR,"g:netrw_ctags<".g:netrw_ctags."> is not executable!",51)
-    endif
-   else
-    let cmd= s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist)
-    call netrw#NetrwObtain(a:islocal,"tags")
-    let curdir= b:netrw_curdir
-    1split
-    e tags
-    let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','')
-"    call Decho("curdir<".curdir."> path<".path.">")
-    exe '%s/\t\(\S\+\)\t/\t'.escape(path,'/').'\1\t/e'
-    wq!
-   endif
-   2match none
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
-  endif
-
-"  call Dret("s:NetrwMarkFileTag")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMarkFileTgt:  (invoked by mt) This function sets up a marked file target {{{2
-"   Sets up two variables, 
-"     s:netrwmftgt : holds the target directory
-"     s:netrwmfloc : 0=target directory is remote
-"                    1=target directory is local
-fun! s:NetrwMarkFileTgt(islocal)
-"  call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")")
-  let svpos  = netrw#NetrwSavePosn()
-  let curdir = b:netrw_curdir
-  let hadtgt = exists("s:netrwmftgt")
-
-  " set up target
-  if line(".") < w:netrw_bannercnt
-   " if cursor in banner region, use b:netrw_curdir for the target
-   let s:netrwmftgt= b:netrw_curdir
-"   call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
-
-  else
-  " get word under cursor.
-  "  * If directory, use it for the target.
-  "  * If file, use b:netrw_curdir for the target
-   let curword= s:NetrwGetWord()
-   let tgtdir = s:ComposePath(curdir,curword)
-   if isdirectory(tgtdir)
-    let s:netrwmftgt = tgtdir
-"    call Decho("isdir: s:netrwmftgt<".s:netrwmftgt.">")
-   else
-    let s:netrwmftgt = curdir
-"    call Decho("isfile: s:netrwmftgt<".s:netrwmftgt.">")
-   endif
-  endif
-  if a:islocal
-   " simplify the target (eg. /abc/def/../ghi -> /abc/ghi)
-   let s:netrwmftgt= simplify(s:netrwmftgt)
-"   call Decho("simplify: s:netrwmftgt<".s:netrwmftgt.">")
-  endif
-  if g:netrw_cygwin
-   let s:netrwmftgt= substitute(system("cygpath ".s:netrwmftgt),'\n$','','')
-  endif
-  let s:netrwmfloc= a:islocal
-
-  if g:netrw_fastbrowse > 0
-   call s:LocalBrowseShellCmdRefresh()
-  endif
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-  if !hadtgt
-   norm! j
-  endif
-
-"  call Dret("s:NetrwMarkFileTgt")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2
-fun! s:NetrwUnmarkList(curbufnr,curdir)
-"  call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)")
-
-  "  remove all files in local marked-file list from global list
-  for mfile in s:netrwmarkfilelist_{a:curbufnr}
-   let dfile = s:ComposePath(a:curdir,mfile)       " prepend directory to mfile
-   let idx   = index(s:netrwmarkfilelist,dfile)    " get index in list of dfile
-   call remove(s:netrwmarkfilelist,idx)            " remove from global list
-  endfor
-  if s:netrwmarkfilelist == []
-   unlet s:netrwmarkfilelist
-  endif
-
-  " getting rid of the local marked-file lists is easy
-  unlet s:netrwmarkfilelist_{a:curbufnr}
-  unlet s:netrwmarkfilemtch_{a:curbufnr}
-  2match none
-"  call Dret("s:NetrwUnmarkList")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwUnmarkAll: remove the global marked file list and all local ones {{{2
-fun! s:NetrwUnmarkAll()
-"  call Dfunc("s:NetrwUnmarkAll()")
-  if exists("s:netrwmarkfilelist")
-   unlet s:netrwmarkfilelist
-  endif
-  silent call s:NetrwUnmarkAll2()
-  2match none
-"  call Dret("s:NetrwUnmarkAll")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwUnmarkAll2: {{{2
-fun! s:NetrwUnmarkAll2()
-"  call Dfunc("s:NetrwUnmarkAll2()")
-  redir => netrwmarkfilelist_let
-  let
-  redir END
-  let netrwmarkfilelist_list= split(netrwmarkfilelist_let,'\n')          " convert let string into a let list
-  call filter(netrwmarkfilelist_list,"v:val =~ '^s:netrwmarkfilelist_'") " retain only those vars that start as s:netrwmarkfilelist_ 
-  call map(netrwmarkfilelist_list,"substitute(v:val,'\\s.*$','','')")    " remove what the entries are equal to
-  for flist in netrwmarkfilelist_list
-   let curbufnr= substitute(flist,'s:netrwmarkfilelist_','','')
-   unlet s:netrwmarkfilelist_{curbufnr}
-   unlet s:netrwmarkfilemtch_{curbufnr}
-  endfor
-"  call Dret("s:NetrwUnmarkAll2")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwUnMarkFile: {{{2
-fun! s:NetrwUnMarkFile(islocal)
-"  call Dfunc("s:NetrwUnMarkFile(islocal=".a:islocal.")")
-  let svpos    = netrw#NetrwSavePosn()
-  let curbufnr = bufnr("%")
-
-  " unmark marked file list (although I expect s:NetrwUpload()
-  " to do it, I'm just making sure)
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-"   call Decho("unlet'ing: s:netrwmarkfile[list|mtch]_".bufnr("%"))
-   unlet s:netrwmarkfilelist
-   unlet s:netrwmarkfilelist_{curbufnr}
-   unlet s:netrwmarkfilemtch_{curbufnr}
-   2match none
-  endif
-
-"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-"  call Dret("s:NetrwUnMarkFile")
-endfun
-
-" ===========================================
-" s:NetrwMenu: generates the menu for gvim and netrw {{{2
-fun! s:NetrwMenu(domenu)
-
-  if !exists("g:NetrwMenuPriority")
-   let g:NetrwMenuPriority= 80
-  endif
-
-  if has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
-
-   if !exists("s:netrw_menu_enabled") && a:domenu
-"    call Decho("initialize menu")
-    let s:netrw_menu_enabled= 1
-    exe 'silent! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
-    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4
-    exe 'silent! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-	:'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.2   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Bookmark<tab>gb	gb'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.3   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab>'."<ctrl-h>	\<Plug>NetrwHideEdit"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<Plug>NetrwRefresh"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.2  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.3  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.4  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.11.5  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.1  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.2  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.3  '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.4  '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.5  '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.6  '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.7  '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.8  '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.9  '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.15    '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.1  '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i	i'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.2  '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a	a'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.3  '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
-    exe 'silent! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s	s'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
-    exe 'silent! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
-    let s:netrw_menucnt= 28
-
-   elseif !a:domenu
-    let s:netrwcnt = 0
-    let curwin     = winnr()
-    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
-    exe curwin."wincmd w"
-
-    if s:netrwcnt <= 1
-"     call Decho("clear menus")
-     exe 'silent! unmenu '.g:NetrwTopLvlMenu
-"     call Decho('exe silent! unmenu '.g:NetrwTopLvlMenu.'*')
-     silent! unlet s:netrw_menu_enabled
-    endif
-   endif
-"   call Dret("NetrwMenu")
-  endif
-
-endfun
-
-" ==========================================
-" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
-fun! s:NetrwObtain(islocal)
-"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
-
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   for fname in s:netrwmarkfilelist_{bufnr("%")}
-    let islocal= fname !~ '^\a\+://'
-    call netrw#NetrwObtain(islocal,fname)
-   endfor
-   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
-  endif
-  if exists("s:netrwmarkfilelist")
-   for fname in s:netrwmarkfilelist
-    let islocal= fname !~ '^\a\+://'
-    call netrw#NetrwObtain(islocal,fname)
-   endfor
-   call s:NetrwUnmarkAll()
-  else
-   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
-  endif
-
-"  call Dret("NetrwObtain")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#NetrwObtain: {{{2
-fun! netrw#NetrwObtain(islocal,fname,...)
-"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".a:fname.">) a:0=".a:0)
-  " NetrwStatusLine support - for obtaining support
-
-  if a:islocal
-
-   " obtain local file from getcwd() to b:netrw_curdir
-"   call Decho("obtain local file from ".getcwd()." to b:netrw_curdir<".b:netrw_curdir.">")
-   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
-    let fname= expand("<cWORD>")
-    let fcopy= readfile(b:netrw_curdir."/".fname,"b")
-    call writefile(fcopy,getcwd()."/".fname,"b")
-   elseif !exists("b:netrw_curdir")
-    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
-   else
-    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
-   endif
-
-  else
-
-   " obtain a remote file to local directory (see tgtdir below)
-"   call Decho("obtain a remote file to local directory<".getcwd().">")
-   call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
-   
-   " set up target directory (default is vim's idea of the current directory)
-   if a:0 > 0
-    let tgtdir= a:1
-   else
-    let tgtdir= getcwd()
-   endif
-"   call Decho("obtain a remote file<".a:fname."> to tgtdir<".tgtdir.">")
-   if exists("w:netrw_method") && w:netrw_method =~ '[235]'
-"    call Decho("method=".w:netrw_method)
-    if executable("ftp")
-"     call Decho("using ftp, method=".w:netrw_method)
-     let curdir = b:netrw_curdir
-     let path   = substitute(curdir,'ftp://[^/]\+/','','e')
-     let curline= line(".")
-     let endline= line("$")+1
-     setlocal ma noro
-"     call Decho("setlocal ma noro")
-     keepjumps $
-"     call Decho("getcwd<".getcwd().">")
-"     call Decho("curdir<".curdir.">")
-"     call Decho("path<".path.">")
-"     call Decho("curline=".curline)
-"     call Decho("endline=".endline)
-
-     ".........................................
-     if w:netrw_method == 2
-      " ftp + <.netrc>: Method #2
-      setlocal ff=unix
-      if path != ""
-       put ='cd '.path
-"       call Decho("ftp:  cd ".path)
-      endif
-      if tgtdir != '.'
-       put ='lcd '.tgtdir
-      endif
-      put ='get '.a:fname
-"      call Decho("ftp:  get ".a:fname)
-      put ='quit'
-"      call Decho("ftp:  quit")
-      if exists("g:netrw_port") && g:netrw_port != ""
-"       call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
-       exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
-      else
-"       call Decho("exe ".g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
-       exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
-      endif
-
-    ".........................................
-   elseif w:netrw_method == 3
-    " ftp + machine,id,passwd,filename: Method #3
-     setlocal ff=unix
-     if exists("g:netrw_port") && g:netrw_port != ""
-      put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho('ftp:  open '.g:netrw_machine.' '.g:netrw_port)
-     else
-      put ='open '.g:netrw_machine
-"      call Decho('ftp:  open '.g:netrw_machine)
-     endif
-
-     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-      put =g:netrw_uid
-      put ='\"'.s:netrw_passwd.'\"'
-"      call Decho('ftp:  g:netrw_uid')
-"      call Decho('ftp:  s:netrw_passwd')
-     else
-      put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"      call Decho('user '.g:netrw_uid.' '.s:netrw_passwd)
-     endif
-
-    if path != ""
-     put ='cd '.path
-"     call Decho('ftp:  cd '.a:path)
-    endif
-    if tgtdir != '.'
-     put ='lcd '.tgtdir
-"     call Decho('ftp:  lcd '.tgtdir)
-    endif
-    put ='get '.a:fname
-"    call Decho("ftp:  get ".a:fname)
-    put ='quit'
-"    call Decho("ftp:  quit")
-
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-"    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i -n")
-    exe g:netrw_silentxfer.endline.",$!".g:netrw_ftp_cmd." -i -n"
-
-    ".........................................
-    else
-     call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",28)
-    endif
-    " restore
-    exe "silent! ".endline.",$d"
-    exe "keepjumps ".curline
-    setlocal noma nomod ro
-   else
-"    call Decho("ftp not executable")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"this system doesn't support ftp",29)
-    endif
-    " restore status line
-    let &stl        = s:netrw_users_stl
-    let &laststatus = s:netrw_users_ls
-    " restore NetrwMethod
-    if exists("keep_netrw_method")
-     call s:NetrwMethod(keep_netrw_choice)
-     let w:netrw_method  = keep_netrw_wmethod
-    endif
-"   call Dret("NetrwObtain")
-    return
-   endif
-
-   ".........................................
-   else
-    " scp: Method#4
-    let curdir = b:netrw_curdir
-    let path   = substitute(curdir,'scp://[^/]\+/','','e')
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-    if a:fname =~ '^\a\+:'
-     let fname= substitute(a:fname,'^.*/','','')
-    else
-     let fname= a:fname
-    endif
-    if path !~ '/$'
-     let path= path.'/'
-    endif
-"    call Decho("using scp: curdir <".curdir.">")
-"    call Decho("using scp: fname  <".fname.">")
-"    call Decho("using scp: machine<".g:netrw_machine.">")
-"    call Decho("using scp: path   <".path.">")
-"    call Decho("using scp: pwd    <".getcwd().">")
-"    call Decho("using scp: tgtdir <".tgtdir.">")
-"    call Decho("using scp: useport<".useport.">")
-"    call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ".tgtdir)
-    exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".path.escape(fname,' ?&')." ".tgtdir
-    endif
-
-    " restore status line
-    let &stl        = s:netrw_users_stl
-    let &laststatus = s:netrw_users_ls
-"    redraw!
-
-    " restore NetrwMethod
-    if exists("keep_netrw_method")
-     call s:NetrwMethod(keep_netrw_choice)
-     let w:netrw_method  = keep_netrw_wmethod
-    endif
-   endif
-
-"  call Dret("netrw#NetrwObtain")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwPrevWinOpen: open file/directory in previous window.  {{{2
-"   If there's only one window, then the window will first be split.
-"   Returns:
-"     choice = 0 : didn't have to choose
-"     choice = 1 : saved modified file in window first
-"     choice = 2 : didn't save modified file, opened window
-"     choice = 3 : cancel open
-fun! s:NetrwPrevWinOpen(islocal)
-"  call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")")
-
-  " grab a copy of the b:netrw_curdir to pass it along to newly split windows
-  let curdir    = b:netrw_curdir
-
-  " get last window number and the word currently under the cursor
-  let lastwinnr = winnr("$")
-  let curword   = s:NetrwGetWord()
-  let choice    = 0
-"  call Decho("lastwinnr=".lastwinnr." curword<".curword.">")
-
-  let didsplit  = 0
-  if lastwinnr == 1
-   " if only one window, open a new one first
-"   call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
-   if g:netrw_preview
-"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s")
-    exe (g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s"
-   else
-"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-    exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
-   endif
-   let didsplit  = 1
-
-  else
-   call s:SaveBufVars()
-"   call Decho("wincmd p")
-   wincmd p
-   call s:RestoreBufVars()
-   " if the previous window's buffer has been changed (is modified),
-   " and it doesn't appear in any other extant window, then ask the
-   " user if s/he wants to abandon modifications therein.
-   let bnr    = winbufnr(0)
-   let bnrcnt = 0
-   if &mod
-"    call Decho("detected: prev window's buffer has been modified: bnr=".bnr." winnr#".winnr())
-    let eikeep= &ei
-    set ei=all
-    windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif
-    exe bnr."wincmd p"
-    let &ei= eikeep
-"    call Decho("bnr=".bnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr#".winnr())
-    if bnrcnt == 1
-     let bufname= bufname(winbufnr(winnr()))
-     let choice= confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel")
-"     call Decho("bufname<".bufname."> choice=".choice." winnr#".winnr())
-
-     if choice == 1
-      " Yes -- write file & then browse
-      let v:errmsg= ""
-      silent w
-      if v:errmsg != ""
-       call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30)
-       if didsplit
-       	q
-       else
-       	wincmd p
-       endif
-"       call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">")
-       return choice
-      endif
-
-     elseif choice == 2
-      " No -- don't worry about changed file, just browse anyway
-      setlocal nomod
-      call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
-      wincmd p
-
-     else
-      " Cancel -- don't do this
-      if didsplit
-       q
-      else
-       wincmd p
-      endif
-"      call Dret("NetrwPrevWinOpen ".choice." : cancelled")
-      return choice
-     endif
-    endif
-   endif
-  endif
-
-  " restore b:netrw_curdir (window split/enew may have lost it)
-  let b:netrw_curdir= curdir
-  if a:islocal < 2
-   if a:islocal
-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(a:islocal,curword))
-   else
-    call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,curword))
-   endif
-  endif
-"  call Dret("NetrwPrevWinOpen ".choice)
-  return choice
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwUpload: load fname to tgt (used by NetrwMarkFileCopy()) {{{2
-"                    fname may itself be a remote or local file
-"                    tgt is assumed to be remote, so NetWrite will be used
-"                    (indirectly via an autocmd)
-fun! s:NetrwUpload(fname,tgt)
-"  call Dfunc("s:NetrwUpload(fname<".a:fname."> tgt<".a:tgt.">)")
-
-  1split
-  let efname= escape(a:fname,g:netrw_fname_escape)
-"  call Decho("exe e ".efname)
-  exe "e ".efname
-  if a:tgt =~ '/$'
-   let wfname= substitute(a:fname,'^.*/','','')
-   let wfname= escape(a:tgt.wfname,g:netrw_fname_escape)
-"   call Decho("exe w ".wfname)
-   exe "w ".wfname
-  else
-   let wfname= escape(a:tgt,g:netrw_fname_escape)
-"   call Decho("exe w ".wfname)
-   exe "w ".wfname
-  endif
-  q!
-
-"  call Dret("s:NetrwUpload")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwPreview: {{{2
-fun! s:NetrwPreview(path) range
-"  call Dfunc("NetrwPreview(path<".a:path.">)")
-  call s:NetrwOptionSave("s:")
-  call s:NetrwSafeOptions()
-  if has("quickfix")
-   if !isdirectory(a:path)
-    exe (g:netrw_preview? "vert " : "")."pedit ".escape(a:path,g:netrw_fname_escape)
-   elseif !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
-   endif
-  elseif !exists("g:netrw_quiet")
-   call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
-  endif
-  call s:NetrwOptionRestore("s:")
-"  call Dret("NetrwPreview")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwRefresh: {{{2
-fun! s:NetrwRefresh(islocal,dirname)
-"  call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction)
-  " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first.
-  " NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
-  " Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
-"  call Decho("clear buffer<".expand("%")."> with :%d")
-  %d
-  if a:islocal
-   call netrw#LocalBrowseCheck(a:dirname)
-  else
-   call s:NetrwBrowse(a:islocal,a:dirname)
-  endif
-  call netrw#NetrwRestorePosn()
-
-  " restore file marks
-  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
-"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
-  else
-"   call Decho("2match none")
-   2match none
-  endif
-
-"  redraw!
-"  call Dret("NetrwRefresh")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwSetSort: sets up the sort based on the g:netrw_sort_sequence {{{2
-"          What this function does is to compute a priority for the patterns
-"          in the g:netrw_sort_sequence.  It applies a substitute to any
-"          "files" that satisfy each pattern, putting the priority / in
-"          front.  An "*" pattern handles the default priority.
-fun! s:NetrwSetSort()
-"  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
-  if w:netrw_liststyle == s:LONGLIST
-   let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
-  else
-   let seqlist  = g:netrw_sort_sequence
-  endif
-  " sanity check -- insure that * appears somewhere
-  if seqlist == ""
-   let seqlist= '*'
-  elseif seqlist !~ '\*'
-   let seqlist= seqlist.',*'
-  endif
-  let priority = 1
-  while seqlist != ""
-   if seqlist =~ ','
-    let seq     = substitute(seqlist,',.*$','','e')
-    let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e')
-   else
-    let seq     = seqlist
-    let seqlist = ""
-   endif
-   let eseq= escape(seq,'/')
-   if priority < 10
-    let spriority= "00".priority.'\/'
-   elseif priority < 100
-    let spriority= "0".priority.'\/'
-   else
-    let spriority= priority.'\/'
-   endif
-"   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
-
-   " sanity check
-   if w:netrw_bannercnt > line("$")
-    " apparently no files were left after a Hiding pattern was used
-"    call Dret("SetSort : no files left after hiding")
-    return
-   endif
-   if seq == '*'
-    let starpriority= spriority
-   else
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.eseq.'/s/^/'.spriority.'/'
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}\/\d\{3}\//s/^\d\{3}\///'
-   endif
-   let priority = priority + 1
-  endwhile
-  if exists("starpriority")
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}\//s/^/'.starpriority.'/'
-  endif
-
-  " Following line associated with priority -- items that satisfy a priority
-  " pattern get prefixed by ###/ which permits easy sorting by priority.
-  " Sometimes files can satisfy multiple priority patterns -- only the latest
-  " priority pattern needs to be retained.  So, at this point, these excess
-  " priority prefixes need to be removed, but not directories that happen to
-  " be just digits themselves.
-  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}\/\)\%(\d\{3}\/\)\+\ze./\1/e'
-
-"  call Dret("SetSort")
-endfun
-
-" =====================================================================
-" s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2
-fun! s:NetrwSortStyle(islocal)
-"  call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">")
-  call s:NetrwSaveWordPosn()
-  let svpos= netrw#NetrwSavePosn()
-
-  let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'
-  norm! 0
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwSplit: mode {{{2
-"           =0 : net   and o
-"           =1 : net   and t
-"           =2 : net   and v
-"           =3 : local and o
-"           =4 : local and t
-"           =5 : local and v
-fun! s:NetrwSplit(mode)
-"  call Dfunc("s:NetrwSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
-
-  call s:SaveWinVars()
-
-  if a:mode == 0
-   " remote and o
-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
-   let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
-   unlet s:didsplit
-
-  elseif a:mode == 1
-   " remote and t
-   let cursorword  = s:NetrwGetWord()
-"   call Decho("tabnew")
-   tabnew
-   let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,cursorword))
-   unlet s:didsplit
-
-  elseif a:mode == 2
-   " remote and v
-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
-   let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
-   unlet s:didsplit
-
-  elseif a:mode == 3
-   " local and o
-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
-   let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
-   unlet s:didsplit
-
-  elseif a:mode == 4
-   " local and t
-   let netrw_curdir= b:netrw_curdir
-   let cursorword  = s:NetrwGetWord()
-"   call Decho("tabnew")
-   tabnew
-   let b:netrw_curdir= netrw_curdir
-   let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
-   unlet s:didsplit
-
-  elseif a:mode == 5
-   " local and v
-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
-   let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
-   unlet s:didsplit
-
-  else
-   call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
-  endif
-
-"  call Dret("s:NetrwSplit")
-endfun
-
-" ---------------------------------------------------------------------
-" NetrwStatusLine: {{{2
-fun! NetrwStatusLine()
-
-" vvv NetrwStatusLine() debugging vvv
-"  let g:stlmsg=""
-"  if !exists("w:netrw_explore_bufnr")
-"   let g:stlmsg="!X<explore_bufnr>"
-"  elseif w:netrw_explore_bufnr != bufnr("%")
-"   let g:stlmsg="explore_bufnr!=".bufnr("%")
-"  endif
-"  if !exists("w:netrw_explore_line")
-"   let g:stlmsg=" !X<explore_line>"
-"  elseif w:netrw_explore_line != line(".")
-"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
-"  endif
-"  if !exists("w:netrw_explore_list")
-"   let g:stlmsg=" !X<explore_list>"
-"  endif
-" ^^^ NetrwStatusLine() debugging ^^^
-
-  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
-   " restore user's status line
-   let &stl        = s:netrw_users_stl
-   let &laststatus = s:netrw_users_ls
-   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
-   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
-   return ""
-  else
-   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
-  endif
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwTreeDir: determine tree directory given current cursor position {{{2
-" (full path directory with trailing slash returned)
-fun! s:NetrwTreeDir()
-"  call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline(".")."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">")
-
-  let treedir= b:netrw_curdir
-"  call Decho("set initial treedir<".treedir.">")
-  let s:treecurpos= netrw#NetrwSavePosn()
-
-  if w:netrw_liststyle == s:TREELIST
-"   call Decho("w:netrrw_liststyle is TREELIST:")
-"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
-   if getline('.') =~ '/$'
-    let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e')
-   else
-    let treedir= ""
-   endif
-
-"   call Decho("treedir<".treedir.">")
-
-   " detect user attempting to close treeroot
-   if getline('.') !~ '|' && getline('.') != '..'
-"    call Decho("user attempted to close treeroot")
-    " now force a refresh
-"    call Decho("clear buffer<".expand("%")."> with :%d")
-    keepjumps %d
-"    call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
-    return b:netrw_curdir
-   endif
-
-   " elide all non-depth information
-   let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
-"   call Decho("depth<".depth."> 1st subst")
-
-   " elide first depth
-   let depth = substitute(depth,'^| ','','')
-"   call Decho("depth<".depth."> 2nd subst")
-
-   " construct treedir by searching backwards at correct depth
-"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
-   while depth != "" && search('^'.depth.'[^|].\{-}/$','bW')
-    let dirname= substitute(getline("."),'^\(| \)*','','e')
-    let treedir= dirname.treedir
-    let depth  = substitute(depth,'^| ','','')
-"    call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
-   endwhile
-   if w:netrw_treetop =~ '/$'
-    let treedir= w:netrw_treetop.treedir
-   else
-    let treedir= w:netrw_treetop.'/'.treedir
-   endif
-"   call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
-  endif
-  let treedir= substitute(treedir,'//$','/','')
-
-"  " now force a refresh
-"" call DECHO("clear buffer<".expand("%")."> with :%d")
-"  setlocal ma noro
-"  keepjumps %d
-
-"  call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
-  return treedir
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwTreeDisplay: recursive tree display {{{2
-fun! s:NetrwTreeDisplay(dir,depth)
-"  call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)")
-
-  " insure that there are no folds
-  setlocal nofen
-
-  " install ../ and shortdir
-  if a:depth == ""
-   call setline(line("$")+1,'../')
-"   call Decho("setline#".line("$")." ../ (depth is zero)")
-  endif
-  if a:dir =~ '^\a\+://'
-   if a:dir == w:netrw_treetop
-    let shortdir= a:dir
-   else
-    let shortdir= substitute(a:dir,'^.*/\([^/]\+\)/$','\1/','e')
-   endif
-   call setline(line("$")+1,a:depth.shortdir)
-  else
-   let shortdir= substitute(a:dir,'^.*/','','e')
-   call setline(line("$")+1,a:depth.shortdir.'/')
-  endif
-"  call Decho("setline#".line("$")." shortdir<".a:depth.shortdir.">")
-
-  " append a / to dir if its missing one
-  let dir= a:dir
-  if dir !~ '/$'
-   let dir= dir.'/'
-  endif
-
-  " display subtrees (if any)
-  let depth= "| ".a:depth
-
-"  call Decho("display subtrees with depth<".depth."> and current leaves")
-  for entry in w:netrw_treedict[a:dir]
-   let direntry= substitute(dir.entry,'/$','','e')
-"   call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">")
-   if entry =~ '/$' && has_key(w:netrw_treedict,direntry)
-"    call Decho("<".direntry."> is a key in treedict - display subtree for it")
-    call s:NetrwTreeDisplay(direntry,depth)
-   elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/')
-"    call Decho("<".direntry."/> is a key in treedict - display subtree for it")
-    call s:NetrwTreeDisplay(direntry.'/',depth)
-   else
-"    call Decho("<".entry."> is not a key in treedict (no subtree)")
-    call setline(line("$")+1,depth.entry)
-   endif
-  endfor
-"  call Dret("NetrwTreeDisplay")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwTreeListing: displays tree listing from treetop on down, using NetrwTreeDisplay() {{{2
-fun! s:NetrwTreeListing(dirname)
-  if w:netrw_liststyle == s:TREELIST
-"   call Dfunc("NetrwTreeListing() bufname<".expand("%").">")
-"   call Decho("curdir<".a:dirname.">")
-"   call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exit")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit"))
-
-   " update the treetop
-"   call Decho("update the treetop")
-   if !exists("w:netrw_treetop")
-    let w:netrw_treetop= a:dirname
-"    call Decho("w:netrw_treetop<".w:netrw_treetop."> (reusing)")
-   elseif (w:netrw_treetop =~ ('^'.a:dirname) && s:Strlen(a:dirname) < s:Strlen(w:netrw_treetop)) || a:dirname !~ ('^'.w:netrw_treetop)
-    let w:netrw_treetop= a:dirname
-"    call Decho("w:netrw_treetop<".w:netrw_treetop."> (went up)")
-   endif
-
-   " insure that we have at least an empty treedict
-   if !exists("w:netrw_treedict")
-    let w:netrw_treedict= {}
-   endif
-
-   " update the directory listing for the current directory
-"   call Decho("updating dictionary with ".a:dirname.":[..directory listing..]")
-"   call Decho("bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
-   exe "silent! keepjumps ".w:netrw_bannercnt.',$g@^\.\.\=/$@d'
-   let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$"))
-"   call Decho("w:treedict[".a:dirname."]= ".w:netrw_treedict[a:dirname])
-   exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
-
-   " if past banner, record word
-   if exists("w:netrw_bannercnt") && line(".") > w:netrw_bannercnt
-    let fname= expand("<cword>")
-   else
-    let fname= ""
-   endif
-"   call Decho("fname<".fname.">")
-
-   " display from treetop on down
-   call s:NetrwTreeDisplay(w:netrw_treetop,"")
-
-"   call Dret("NetrwTreeListing : bufname<".expand("%").">")
-  endif
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwWideListing: {{{2
-fun! s:NetrwWideListing()
-
-  if w:netrw_liststyle == s:WIDELIST
-"   call Dfunc("NetrwWideListing() w:netrw_liststyle=".w:netrw_liststyle.' fo='.&fo.' l:fo='.&l:fo)
-   " look for longest filename (cpf=characters per filename)
-   " cpf: characters per file
-   " fpl: files per line
-   " fpc: files per column
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
-   let b:netrw_cpf= 0
-   if line("$") >= w:netrw_bannercnt
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
-   else
-"    call Dret("NetrwWideListing")
-    return
-   endif
-"   call Decho("max file strlen+1=".b:netrw_cpf)
-   let b:netrw_cpf= b:netrw_cpf + 1
-
-   " determine qty files per line (fpl)
-   let w:netrw_fpl= winwidth(0)/b:netrw_cpf
-   if w:netrw_fpl <= 0
-    let w:netrw_fpl= 1
-   endif
-"   call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
-
-   " make wide display
-   exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
-   let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
-   let newcolstart = w:netrw_bannercnt + fpc
-   let newcolend   = newcolstart + fpc - 1
-"   call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]")
-   silent! let keepregstar = @*
-   while line("$") >= newcolstart
-    if newcolend > line("$") | let newcolend= line("$") | endif
-    let newcolqty= newcolend - newcolstart
-    exe newcolstart
-    if newcolqty == 0
-     exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
-    else
-     exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
-    endif
-    exe "silent keepjumps ".newcolstart.','.newcolend.'d'
-    exe 'silent keepjumps '.w:netrw_bannercnt
-   endwhile
-   silent! let @*= keepregstar
-   exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
-   setlocal noma nomod ro
-"   call Dret("NetrwWideListing")
-  endif
-
-endfun
-
-" ---------------------------------------------------------------------
-" s:PerformListing: {{{2
-fun! s:PerformListing(islocal)
-"  call Dfunc("s:PerformListing(islocal=".a:islocal.") buf(%)=".bufnr("%")."<".bufname("%").">")
-
-  call s:NetrwSafeOptions()
-  setlocal noro ma
-"  call Decho("setlocal noro ma")
-
-"  if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1	" Decho
-"   call Decho("(netrw) Processing your browsing request...")
-"  endif								" Decho
-
-"  call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'))
-  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-   " force a refresh for tree listings
-"   call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
-   keepjumps %d
-  endif
-
-  " save current directory on directory history list
-  call s:NetrwBookmarkDir(3,b:netrw_curdir)
-
-  " Set up the banner {{{3
-"  call Decho("set up banner")
-  keepjumps put ='\" ============================================================================'
-  keepjumps put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
-  keepjumps put ='\"   '.b:netrw_curdir
-  keepjumps 1d
-  let w:netrw_bannercnt= 3
-  exe "keepjumps ".w:netrw_bannercnt
-
-  let sortby= g:netrw_sort_by
-  if g:netrw_sort_direction =~ "^r"
-   let sortby= sortby." reversed"
-  endif
-
-  " Sorted by... {{{3
-"  call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
-  if g:netrw_sort_by =~ "^n"
-"   call Decho("directories will be sorted by name")
-   " sorted by name
-   keepjumps put ='\"   Sorted by      '.sortby
-   keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
-   let w:netrw_bannercnt= w:netrw_bannercnt + 2
-  else
-"   call Decho("directories will be sorted by size or time")
-   " sorted by size or date
-   keepjumps put ='\"   Sorted by '.sortby
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
-  endif
-  exe "keepjumps ".w:netrw_bannercnt
-
-  " show copy/move target, if any
-  if exists("s:netrwmftgt") && exists("s:netrwmfloc")
-"   call Decho("show copy/move target<".s:netrwmftgt.">")
-   if s:netrwmfloc
-    keepjumps put ='\"   Copy/Move Tgt: '.s:netrwmftgt.' (local)'
-   else
-    keepjumps put ='\"   Copy/Move Tgt: '.s:netrwmftgt.' (remote)'
-   endif
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
-  else
-"   call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
-  endif
-  exe "keepjumps ".w:netrw_bannercnt
-
-  " Hiding...  -or-  Showing... {{{3
-"  call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
-  if g:netrw_list_hide != "" && g:netrw_hide
-   if g:netrw_hide == 1
-    keepjumps put ='\"   Hiding:        '.g:netrw_list_hide
-   else
-    keepjumps put ='\"   Showing:       '.g:netrw_list_hide
-   endif
-   let w:netrw_bannercnt= w:netrw_bannercnt + 1
-  endif
-  exe "keepjumps ".w:netrw_bannercnt
-  keepjumps put ='\"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
-  keepjumps put ='\" ============================================================================'
-  let w:netrw_bannercnt= w:netrw_bannercnt + 2
-
-  " bannercnt should index the line just after the banner
-  let w:netrw_bannercnt= w:netrw_bannercnt + 1
-  exe "keepjumps ".w:netrw_bannercnt
-"  call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
-
-  " set up syntax highlighting {{{3
-"  call Decho("set up syntax highlighting")
-  if has("syntax")
-   setlocal ft=netrw
-   if !exists("g:syntax_on") || !g:syntax_on
-    setlocal ft=
-   endif
-  endif
-
-  " get list of files
-"  call Decho("Get list of files - islocal=".a:islocal)
-  if a:islocal
-   call s:LocalListing()
-  else " remote
-   call s:NetrwRemoteListing()
-  endif
-"  call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
-
-  " manipulate the directory listing (hide, sort) {{{3
-  if line("$") >= w:netrw_bannercnt
-"   call Decho("manipulate directory listing (hide)")
-"   call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
-   if g:netrw_hide && g:netrw_list_hide != ""
-    call s:NetrwListHide()
-   endif
-   if line("$") >= w:netrw_bannercnt
-"    call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
-
-    if g:netrw_sort_by =~ "^n"
-     " sort by name
-     call s:NetrwSetSort()
-
-     if w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
-      if g:netrw_sort_direction =~ 'n'
-       " normal direction sorting
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
-      else
-       " reverse direction sorting
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
-      endif
-     endif
-     " remove priority pattern prefix
-"     call Decho("remove priority pattern prefix")
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}\///e'
-
-    elseif a:islocal
-     if w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
-      if g:netrw_sort_direction =~ 'n'
-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'
-      else
-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
-       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'
-      endif
-     endif
-     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
-    endif
-
-   elseif g:netrw_sort_direction =~ 'r'
-"    call Decho('reverse the sorted listing')
-    exe 'silent keepjumps '.w:netrw_bannercnt.'g/^/m '.w:netrw_bannercnt
-   endif
-  endif
-
-  " convert to wide/tree listing {{{3
-"  call Decho("modify display if wide/tree listing style")
-  call s:NetrwWideListing()
-  call s:NetrwTreeListing(b:netrw_curdir)
-
-  if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
-   " place cursor on the top-left corner of the file listing
-"   call Decho("place cursor on top-left corner of file listing")
-   exe 'silent keepjumps '.w:netrw_bannercnt
-   norm! 0
-  endif
-
-  " record previous current directory
-  let w:netrw_prvdir= b:netrw_curdir
-"  call Decho("record netrw_prvdir<".w:netrw_prvdir.">")
-
-  " save certain window-oriented variables into buffer-oriented variables {{{3
-  call s:SetBufWinVars()
-  call s:NetrwOptionRestore("w:")
-
-  " set display to netrw display settings
-"  call Decho("set display to netrw display settings (noma nomod etc)")
-  setlocal noma nomod nonu nobl nowrap ro
-  if exists("s:treecurpos")
-
-   call netrw#NetrwRestorePosn(s:treecurpos)
-   unlet s:treecurpos
-  endif
-
-"  call Dret("s:PerformListing : curpos<".string(getpos(".")).">")
-endfun
-
-" ---------------------------------------------------------------------
-" s:SetupNetrwStatusLine: {{{2
-fun! s:SetupNetrwStatusLine(statline)
-"  call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
-
-  if !exists("s:netrw_setup_statline")
-   let s:netrw_setup_statline= 1
-"   call Decho("do first-time status line setup")
-
-   if !exists("s:netrw_users_stl")
-    let s:netrw_users_stl= &stl
-   endif
-   if !exists("s:netrw_users_ls")
-    let s:netrw_users_ls= &laststatus
-   endif
-
-   " set up User9 highlighting as needed
-   let keepa= @a
-   redir @a
-   try
-    hi User9
-   catch /^Vim\%((\a\+)\)\=:E411/
-    if &bg == "dark"
-     hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
-    else
-     hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
-    endif
-   endtry
-   redir END
-   let @a= keepa
-  endif
-
-  " set up status line (may use User9 highlighting)
-  " insure that windows have a statusline
-  " make sure statusline is displayed
-  let &stl=a:statline
-  setlocal laststatus=2
-"  call Decho("stl=".&stl)
-  redraw
-
-"  call Dret("SetupNetrwStatusLine : stl=".&stl)
-endfun
-
-" ---------------------------------------------------------------------
-"  Remote Directory Browsing Support:    {{{1
-" ===========================================
-
-" ---------------------------------------------------------------------
-" s:NetrwRemoteListing: {{{2
-fun! s:NetrwRemoteListing()
-"  call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)")
-
-  call s:RemotePathAnalysis(b:netrw_curdir)
-
-  " sanity check:
-  if exists("b:netrw_method") && b:netrw_method =~ '[235]'
-"   call Decho("b:netrw_method=".b:netrw_method)
-   if !executable("ftp")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18)
-    endif
-    call s:NetrwOptionRestore("w:")
-"    call Dret("s:NetrwRemoteListing")
-    return
-   endif
-
-  elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
-   if !exists("g:netrw_quiet")
-    if g:netrw_list_cmd == ""
-     call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47)
-    else
-     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
-    endif
-   endif
-
-   call s:NetrwOptionRestore("w:")
-"   call Dret("s:NetrwRemoteListing")
-   return
-  endif  " (remote handling sanity check)
-
-  if exists("b:netrw_method")
-"   call Decho("setting w:netrw_method<".b:netrw_method.">")
-   let w:netrw_method= b:netrw_method
-  endif
-
-  if s:method == "ftp"
-   " use ftp to get remote file listing
-"   call Decho("use ftp to get remote file listing")
-   let s:method  = "ftp"
-   let listcmd = g:netrw_ftp_list_cmd
-   if g:netrw_sort_by =~ '^t'
-    let listcmd= g:netrw_ftp_timelist_cmd
-   elseif g:netrw_sort_by =~ '^s'
-    let listcmd= g:netrw_ftp_sizelist_cmd
-   endif
-"   call Decho("listcmd<".listcmd."> (using g:netrw_ftp_list_cmd)")
-   call s:NetrwRemoteFtpCmd(s:path,listcmd)
-"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))'
-
-   if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
-    " shorten the listing
-"    call Decho("generate short listing")
-    exe "keepjumps ".w:netrw_bannercnt
-
-    " cleanup
-    if g:netrw_ftp_browse_reject != ""
-     exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
-    endif
-    silent! keepjumps %s/\r$//e
-
-    " if there's no ../ listed, then put ./ and ../ in
-    let line1= line(".")
-    exe "keepjumps ".w:netrw_bannercnt
-    let line2= search('^\.\.\/\%(\s\|$\)','cnW')
-    if line2 == 0
-"     call Decho("netrw is putting ./ and ../ into listing")
-     keepjumps put='../'
-     keepjumps put='./'
-    endif
-    exe "keepjumps ".line1
-    keepjumps norm! 0
-
-"    call Decho("line1=".line1." line2=".line2." line(.)=".line("."))
-    if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
-"     call Decho("M$ ftp cleanup")
-     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
-    else " normal ftp cleanup
-"     call Decho("normal ftp cleanup")
-     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
-     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
-     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
-    endif
-   endif
-
-  else
-   " use ssh to get remote file listing {{{3
-"   call Decho("use ssh to get remote file listing: s:netrw_shq<".g:netrw_shq."> s:path<".s:path."> g:netrw_cd_escape<".g:netrw_cd_escape.">")
-   let listcmd= s:MakeSshCmd(g:netrw_list_cmd)
-"   call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)")
-   if g:netrw_scp_cmd =~ '^pscp'
-"    call Decho("1: exe silent r! ".listcmd.g:netrw_shq.s:path.g:netrw_shq)
-    exe "silent r! ".listcmd.g:netrw_shq.s:path.g:netrw_shq
-    " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
-    g/^Listing directory/d
-    g/^d[-rwx][-rwx][-rwx]/s+$+/+e
-    silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e
-    if g:netrw_liststyle != s:LONGLIST
-     g/^[dlsp-][-rwx][-rwx][-rwx]/s/^.*\s\(\S\+\)$/\1/e
-    endif
-   else
-    if s:path == ""
-"     call Decho("2: exe silent r! ".listcmd)
-     exe "silent r! ".listcmd
-    else
-"     call Decho("3: exe silent r! ".listcmd." ".g:netrw_shq.s:path.g:netrw_shq)
-     exe "silent r! ".listcmd." ".g:netrw_shq.s:path.g:netrw_shq
-    endif
-   endif
-
-   " cleanup
-   if g:netrw_ftp_browse_reject != ""
-"    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
-    exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
-   endif
-  endif
-
-  if w:netrw_liststyle == s:LONGLIST
-   " do a long listing; these substitutions need to be done prior to sorting {{{3
-"   call Decho("fix long listing:")
-
-   if s:method == "ftp"
-    " cleanup
-    exe "keepjumps ".w:netrw_bannercnt
-    while getline(".") =~ g:netrw_ftp_browse_reject
-     keepjumps d
-    endwhile
-    " if there's no ../ listed, then put ./ and ../ in
-    let line1= line(".")
-    keepjumps 1
-    silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
-    let line2= line(".")
-    if line2 == 0
-     exe 'keepjumps '.w:netrw_bannercnt."put='./'"
-     if b:netrw_curdir != '/'
-      exe 'keepjumps '.w:netrw_bannercnt."put='../'"
-     endif
-    endif
-   exe "keepjumps ".line1
-   keepjumps norm! 0
-   endif
-
-   if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
-"    call Decho("M$ ftp site listing cleanup")
-    exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+\)\(\w.*\)$/\2\t\1/'
-   elseif exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$")
-"    call Decho("normal ftp site listing cleanup: bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
-    exe 'silent keepjumps '.w:netrw_bannercnt
-   endif
-  endif
-
-"  if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho
-"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))'
-"  endif " Decho
-"  call Dret("s:NetrwRemoteListing")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwRemoteRm: remove/delete a remote file or directory {{{2
-fun! s:NetrwRemoteRm(usrhost,path) range
-"  call Dfunc("s:NetrwRemoteRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol("."))
-"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
-  let svpos= netrw#NetrwSavePosn()
-
-  let all= 0
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   " remove all marked files
-   for fname in s:netrwmarkfilelist_{bufnr("%")}
-    let ok= s:NetrwRemoteRmFile(a:path,fname,all)
-    if ok =~ 'q\%[uit]'
-     break
-    elseif ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endfor
-   unlet s:netrwmarkfilelist_{bufnr("%")}
-   unlet s:netrwmarkfilemtch_{bufnr("%")}
-   2match none
-
-  else
-   " remove files specified by range
-
-   " preparation for removing multiple files/directories
-   let ctr= a:firstline
-
-   " remove multiple files and directories
-   while ctr <= a:lastline
-    exe ctr
-    let ok= s:NetrwRemoteRmFile(a:path,s:NetrwGetWord(),all)
-    if ok =~ 'q\%[uit]'
-     break
-    elseif ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-    let ctr= ctr + 1
-   endwhile
-  endif
-
-  " refresh the (remote) directory listing
-"  call Decho("refresh remote directory listing")
-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("s:NetrwRemoteRm")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwRemoteRmFile: {{{2
-fun! s:NetrwRemoteRmFile(path,rmfile,all)
-"  call Dfunc("s:NetrwRemoteRmFile(path<".a:path."> rmfile<".a:rmfile.">) all=".a:all)
-
-  let all= a:all
-  let ok = ""
-
-  if a:rmfile !~ '^"' && (a:rmfile =~ '@$' || a:rmfile !~ '[\/]$')
-   " attempt to remove file
-"    call Decho("attempt to remove file (all=".all.")")
-   if !all
-    echohl Statement
-    call inputsave()
-    let ok= input("Confirm deletion of file<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    echohl NONE
-    if ok == ""
-     let ok="no"
-    endif
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     silent! keepjumps .,$d
-     call s:NetrwRemoteFtpCmd(a:path,"delete ".a:rmfile)
-    else
-     let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd)
-"     call Decho("netrw_rm_cmd<".netrw_rm_cmd.">")
-     if !exists("b:netrw_curdir")
-      call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
-      let ok="q"
-     else
-      let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
-"      call Decho("netrw_rm_cmd<".netrw_rm_cmd.">")
-"      call Decho("remotedir<".remotedir.">")
-"      call Decho("rmfile<".a:rmfile.">")
-      if remotedir != ""
-       let netrw_rm_cmd= netrw_rm_cmd." ".remotedir.escape(a:rmfile,g:netrw_cd_escape)
-      else
-       let netrw_rm_cmd= netrw_rm_cmd." ".escape(a:rmfile,g:netrw_cd_escape)
-      endif
-"      call Decho("call system(".netrw_rm_cmd.")")
-      let ret= system(netrw_rm_cmd)
-      if ret != 0
-       call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
-      endif
-"      call Decho("returned=".ret." errcode=".v:shell_error)
-     endif
-    endif
-   elseif ok =~ 'q\%[uit]'
-    break
-   endif
-
-  else
-   " attempt to remove directory
-"    call Decho("attempt to remove directory")
-   if !all
-    call inputsave()
-    let ok= input("Confirm deletion of directory<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    if ok == ""
-     let ok="no"
-    endif
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
-    else
-     let rmfile          = substitute(a:path.a:rmfile,'/$','','')
-     let netrw_rmdir_cmd = s:MakeSshCmd(g:netrw_rmdir_cmd).' '.rmfile
-"      call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
-     let ret= s:System("system",netrw_rmdir_cmd)
-"      call Decho("returned=".ret." errcode=".v:shell_error)
-
-     if v:shell_error != 0
-"       call Decho("v:shell_error not 0")
-      let netrw_rmf_cmd= s:MakeSshCmd(g:netrw_rmf_cmd).' '.substitute(rmfile,'[\/]$','','e')
-"       call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
-      let ret= s:System("system",netrw_rmf_cmd)
-"       call Decho("returned=".ret." errcode=".v:shell_error)
-
-      if v:shell_error != 0 && !exists("g:netrw_quiet")
-      	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
-      endif
-     endif
-    endif
-
-   elseif ok =~ 'q\%[uit]'
-    break
-   endif
-  endif
-
-"  call Dret("s:NetrwRemoteRmFile ".ok)
-  return ok
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2
-"  This function assumes that a long listing will be received.  Size, time,
-"  and reverse sorts will be requested of the server but not otherwise
-"  enforced here.
-fun! s:NetrwRemoteFtpCmd(path,listcmd)
-"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
-"  call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt)
-
-  " because WinXX ftp uses unix style input
-  let ffkeep= &ff
-  setlocal ma ff=unix noro
-"  call Decho("setlocal ma ff=unix noro")
-
-  " clear off any older non-banner lines
-  " note that w:netrw_bannercnt indexes the line after the banner
-"  call Decho('exe silent! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
-  exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
-
-  ".........................................
-  if w:netrw_method == 2 || w:netrw_method == 5
-   " ftp + <.netrc>:  Method #2
-   if a:path != ""
-    put ='cd \"'.a:path.'\"'
-   endif
-   if exists("g:netrw_ftpextracmd")
-    exe "put ='".g:netrw_ftpextracmd."'"
-"    call Decho("filter input: ".getline("."))
-   endif
-   exe "put ='".a:listcmd."'"
-"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
-   if exists("g:netrw_port") && g:netrw_port != ""
-"    call Decho("exe ".g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
-    exe g:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
-   else
-"    call Decho("exe ".g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine)
-    exe g:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine
-   endif
-
-   ".........................................
-  elseif w:netrw_method == 3
-   " ftp + machine,id,passwd,filename:  Method #3
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     put ='open '.g:netrw_machine.' '.g:netrw_port
-    else
-     put ='open '.g:netrw_machine
-    endif
-
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     put =g:netrw_uid
-     put ='\"'.s:netrw_passwd.'\"'
-    else
-     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-    endif
-
-   if a:path != ""
-    put ='cd \"'.a:path.'\"'
-   endif
-   if exists("g:netrw_ftpextracmd")
-    exe "put ='".g:netrw_ftpextracmd."'"
-"    call Decho("filter input: ".getline("."))
-   endif
-   exe "put ='".a:listcmd."'"
-
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-"    exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
-"    call Decho("exe ".g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n")
-    exe g:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n"
-
-   ".........................................
-  else
-   call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
-  endif
-
-  " cleanup for Windows
-  if has("win32") || has("win95") || has("win64") || has("win16")
-   silent! keepjumps %s/\r$//e
-  endif
-  if a:listcmd == "dir"
-   " infer directory/link based on the file permission string
-   silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
-   silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
-   if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
-    exe "silent! keepjumps ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
-   endif
-  endif
-
-  " ftp's listing doesn't seem to include ./ or ../
-  if !search('^\.\/$\|\s\.\/$','wn')
-   exe 'keepjumps '.w:netrw_bannercnt
-   put ='./'
-  endif
-  if !search('^\.\.\/$\|\s\.\.\/$','wn')
-   exe 'keepjumps '.w:netrw_bannercnt
-   put ='../'
-  endif
-
-  " restore settings
-  let &ff= ffkeep
-"  call Dret("NetrwRemoteFtpCmd")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwRemoteRename: rename a remote file or directory {{{2
-fun! s:NetrwRemoteRename(usrhost,path) range
-"  call Dfunc("NetrwRemoteRename(usrhost<".a:usrhost."> path<".a:path.">)")
-
-  " preparation for removing multiple files/directories
-  let svpos      = netrw#NetrwSavePosn()
-  let ctr        = a:firstline
-  let rename_cmd = s:MakeSshCmd(g:netrw_rename_cmd)
-
-  " rename files given by the markfilelist
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   for oldname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("oldname<".oldname.">")
-    if exists("subfrom")
-     let newname= substitute(oldname,subfrom,subto,'')
-"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-    else
-     call inputsave()
-     let newname= input("Moving ".oldname." to : ",oldname)
-     call inputrestore()
-     if newname =~ '^s/'
-      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
-      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
-      let newname = substitute(oldname,subfrom,subto,'')
-"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-     endif
-    endif
-   
-    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
-    else
-     let oldname= a:path.oldname
-     let newname= a:path.newname
-"     call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,g:netrw_cd_escape).'"')
-     let ret= s:System("system",rename_cmd.' "'.escape(oldname,g:netrw_cd_escape).'" "'.escape(newname,g:netrw_cd_escape).'"')
-    endif
-
-   endfor
-   call s:NetrwUnMarkFile(1)
-
-  else
-
-  " attempt to rename files/directories
-   while ctr <= a:lastline
-    exe "keepjumps ".ctr
-
-    let oldname= s:NetrwGetWord()
-"   call Decho("oldname<".oldname.">")
-
-    call inputsave()
-    let newname= input("Moving ".oldname." to : ",oldname)
-    call inputrestore()
-
-    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
-    else
-     let oldname= a:path.oldname
-     let newname= a:path.newname
-"    call Decho("system(rename_cmd".' "'.escape(oldname," ").'" "'.escape(newname,g:netrw_cd_escape).'"')
-     let ret= s:System("system",rename_cmd.' "'.escape(oldname,g:netrw_cd_escape).'" "'.escape(newname,g:netrw_cd_escape).'"')
-    endif
-
-    let ctr= ctr + 1
-   endwhile
-  endif
-
-  " refresh the directory
-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("NetrwRemoteRename")
-endfun
-
-" ---------------------------------------------------------------------
-"  Local Directory Browsing Support:    {{{1
-" ==========================================
-
-" ---------------------------------------------------------------------
-" netrw#LocalBrowseCheck: {{{2
-fun! netrw#LocalBrowseCheck(dirname)
-  " unfortunate interaction -- split window debugging can't be
-  " used here, must use D-echoRemOn or D-echoTabOn -- the BufEnter
-  " event triggers another call to LocalBrowseCheck() when attempts
-  " to write to the DBG buffer are made.
-  " The &ft == "netrw" test was installed because the BufEnter event
-  " would hit when re-entering netrw windows, creating unexpected
-  " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
-"  call Dfunc("netrw#LocalBrowseCheck(dirname<".a:dirname.">")
-"  call Decho("isdir=".isdirectory(a:dirname))
-  if isdirectory(a:dirname)
-"   call Decho(" ft=".&ft." b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$"))
-   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname)
-    silent! call s:NetrwBrowse(1,a:dirname)
-   elseif &ft == "netrw" && line("$") == 1
-    silent! call s:NetrwBrowse(1,a:dirname)
-   endif
-  endif
-  " not a directory, ignore it
-"  call Dret("netrw#LocalBrowseCheck")
-endfun
-
-" ---------------------------------------------------------------------
-"  s:LocalListing: does the job of "ls" for local directories {{{2
-fun! s:LocalListing()
-"  call Dfunc("s:LocalListing()")
-"  call Decho("&ma=".&ma)
-"  call Decho("&mod=".&mod)
-"  call Decho("&ro=".&ro)
-"  call Decho("bufname(%)<".bufname("%").">")
-
-"  if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("b:netrw_curdir doesn't exist") |endif
-"  if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
-
-  " get the list of files contained in the current directory
-  let dirname    = escape(b:netrw_curdir,g:netrw_glob_escape)
-  let dirnamelen = s:Strlen(b:netrw_curdir)
-  let filelist   = glob(s:ComposePath(dirname,"*"))
-"  call Decho("glob(dirname<".dirname."/*>)=".filelist)
-  if filelist != ""
-   let filelist= filelist."\n"
-  endif
-  let filelist= filelist.glob(s:ComposePath(dirname,".*"))
-"  call Decho("glob(dirname<".dirname."/.*>)=".filelist)
-
-  " Coding choice: either   elide   ./ if present
-  "                or       include ./ if not present
-  if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)'
-   " elide /path/. from glob() entries if present
-   let filelist = substitute(filelist,'\n','\t','g')
-   let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','')
-   let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'\t','\n','g')
-  endif
-"  if filelist !~ '[\\/]\.[\\/]\=\(\n\|$\)'
-    " include ./ in the glob() entry if its missing
-"   call Decho("forcibly tacking on .")
-"   if filelist == ""
-"    let filelist= s:ComposePath(dirname,"./")
-"   else
-"    let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"./")
-"   endif
-"  call Decho("filelist<".filelist.">")
-"  endif
-  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
-    " include ../ in the glob() entry if its missing
-"   call Decho("forcibly tacking on ..")
-   let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
-"   call Decho("filelist<".filelist.">")
-  endif
-  if b:netrw_curdir == '/'
-   " remove .. from filelist when current directory is root directory
-   let filelist= substitute(filelist,'/\.\.\n','','')
-"   call Decho("remove .. from filelist")
-  endif
-  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
-  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
-   " change all \s to /s
-   let filelist= substitute(filelist,'\','/','g')
-  else
-   " escape all \s to \\
-   let filelist= substitute(filelist,'\','\\','g')
-  endif
-
-"  call Decho("dirname<".dirname.">")
-"  call Decho("dirnamelen<".dirnamelen.">")
-"  call Decho("filelist<".filelist.">")
-
-  while filelist != ""
-   if filelist =~ '\n'
-    let filename = substitute(filelist,'\n.*$','','e')
-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
-   else
-    let filename = filelist
-    let filelist = ""
-   endif
-   if filename !~ '/\.$' && filename !~ '/\.\.$' && fnamemodify(filename,"") != resolve(filename)
-    " indicate a symbolic link
-"    call Decho("indicate <".filename."> is a symbolic link with trailing @")
-    let pfile= filename."@"
-   elseif isdirectory(filename)
-"    call Decho("indicate <".filename."> is a directory with trailing /")
-    let pfile= filename."/"
-   elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename)
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-     if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$'
-      " indicate an executable
-"      call Decho("indicate <".filename."> is executable with trailing *")
-      let pfile= filename."*"
-     else
-      " normal file
-      let pfile= filename
-     endif
-    elseif executable(filename)
-     " indicate an executable
-"     call Decho("indicate <".filename."> is executable with trailing *")
-     let pfile= filename."*"
-    else
-     " normal file
-     let pfile= filename
-    endif
-   else
-    let pfile= filename
-   endif
-   if pfile =~ '//$'
-    let pfile= substitute(pfile,'//$','/','e')
-   endif
-   let pfile= strpart(pfile,dirnamelen)
-   let pfile= substitute(pfile,'^[/\\]','','e')
-"   call Decho(" ")
-"   call Decho("filename<".filename.">")
-"   call Decho("pfile   <".pfile.">")
-
-   if w:netrw_liststyle == s:LONGLIST
-    let sz   = getfsize(filename)
-    let fsz  = strpart("               ",1,15-s:Strlen(sz)).sz
-    let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
-"    call Decho("sz=".sz." fsz=".fsz)
-   endif
-
-   if     g:netrw_sort_by =~ "^t"
-    " sort by time (handles time up to 1 quintillion seconds, US)
-"    call Decho("getftime(".filename.")=".getftime(filename))
-    let t  = getftime(filename)
-    let ft = strpart("000000000000000000",1,18-s:Strlen(t)).t
-"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
-    let ftpfile= ft.'/'.pfile
-    keepjumps silent! put=ftpfile
-
-   elseif g:netrw_sort_by =~ "^s"
-    " sort by size (handles file sizes up to 1 quintillion bytes, US)
-"    call Decho("getfsize(".filename.")=".getfsize(filename))
-    let sz   = getfsize(filename)
-    let fsz  = strpart("000000000000000000",1,18-s:Strlen(sz)).sz
-"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
-    let fszpfile= fsz.'/'.pfile
-    keepjumps silent! put =fszpfile
-
-   else
-    " sort by name
-"    call Decho("exe keepjumps put ='".pfile."'")
-    keepjumps silent! put=pfile
-   endif
-  endwhile
-
-  " cleanup any windows mess at end-of-line
-  silent! keepjumps %s/\r$//e
-  setlocal ts=32
-"  call Decho("setlocal ts=32")
-
-"  call Dret("s:LocalListing")
-endfun
-
-" ---------------------------------------------------------------------
-" s:LocalBrowseShellCmdRefresh: this function is called after a user has {{{2
-" performed any shell command.  The idea is to cause all local-browsing
-" buffers to be refreshed after a user has executed some shell command,
-" on the chance that s/he removed/created a file/directory with it.
-fun! s:LocalBrowseShellCmdRefresh()
-"  call Dfunc("LocalBrowseShellCmdRefresh() browselist=".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "empty")." ".tabpagenr("$")." tabs")
-  " determine which buffers currently reside in a tab
-  if !exists("s:netrw_browselist")
-"   call Dret("LocalBrowseShellCmdRefresh : browselist is empty")
-   return
-  endif
-  let itab       = 1
-  let buftablist = []
-  while itab <= tabpagenr("$")
-   let buftablist = buftablist + tabpagebuflist()
-   let itab       = itab + 1
-   tabn
-  endwhile
-"  call Decho("buftablist".string(buftablist))
-"  call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
-  "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
-  "   | refresh any netrw window
-  "   | wipe out any non-displaying netrw buffer
-  let curwin = winnr()
-  let ibl    = 0
-  for ibuf in s:netrw_browselist
-"   call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
-   if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
-"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
-    exe "silent! bw ".ibuf
-    call remove(s:netrw_browselist,ibl)
-"    call Decho("browselist=".string(s:netrw_browselist))
-    continue
-   elseif index(tabpagebuflist(),ibuf) != -1
-"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
-    exe bufwinnr(ibuf)."wincmd w"
-    call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-   endif
-   let ibl= ibl + 1
-  endfor
-  exe curwin."wincmd w"
-
-"  call Dret("LocalBrowseShellCmdRefresh")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwLocalRm: {{{2
-fun! s:NetrwLocalRm(path) range
-"  call Dfunc("NetrwLocalRm(path<".a:path.">)")
-"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
-
-  " preparation for removing multiple files/directories
-  let ret   = 0
-  let all   = 0
-  let svpos = netrw#NetrwSavePosn()
-
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   " remove all marked files
-"   call Decho("remove all marked files")
-   for fname in s:netrwmarkfilelist_{bufnr("%")}
-    let ok= s:NetrwLocalRmFile(a:path,fname,all)
-    if ok =~ 'q\%[uit]'
-     break
-    elseif ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endfor
-   call s:NetrwUnMarkFile(1)
-
-  else
-  " remove (multiple) files and directories
-"   call Decho("remove files in range [".a:firstline.",".a:lastline."]")
-
-   let ctr = a:firstline
-   while ctr <= a:lastline
-    exe "keepjumps ".ctr
-
-    " sanity checks
-    if line(".") < w:netrw_bannercnt
-     let ctr= ctr + 1
-     continue
-    endif
-    let curword= s:NetrwGetWord()
-    if curword == "./" || curword == "../"
-     let ctr= ctr + 1
-     continue
-    endif
-    let ok= s:NetrwLocalRmFile(a:path,curword,all)
-    if ok =~ 'q\%[uit]'
-     break
-    elseif ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-    let ctr= ctr + 1
-   endwhile
-  endif
-
-  " refresh the directory
-  call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("NetrwLocalRm")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwLocalRmFile: remove file fname given the path {{{2
-"                     Give confirmation prompt unless all==1
-fun! s:NetrwLocalRmFile(path,fname,all)
-"  call Dfunc("s:NetrwLocalRmFile(path<".a:path."> fname<".a:fname."> all=".a:all)
-  
-  let all= a:all
-  let ok = ""
-  norm! 0
-  let rmfile= s:ComposePath(a:path,a:fname)
-"  call Decho("rmfile<".rmfile.">")
-
-  if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
-   " attempt to remove file
-   if !all
-    echohl Statement
-    call inputsave()
-    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    echohl NONE
-    if ok == ""
-     let ok="no"
-    endif
-"     call Decho("response: ok<".ok.">")
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-"     call Decho("response: ok<".ok."> (after sub)")
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-    let ret= s:System("delete",rmfile)
-"     call Decho("errcode=".v:shell_error." ret=".ret)
-   endif
-
-  else
-   " attempt to remove directory
-   if !all
-    echohl Statement
-    call inputsave()
-    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-    if ok == ""
-     let ok="no"
-    endif
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-   let rmfile= substitute(rmfile,'[\/]$','','e')
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-"     call Decho("1st attempt: system(".g:netrw_local_rmdir.' "'.rmfile.'")')
-    call s:System("system",g:netrw_local_rmdir.' "'.rmfile.'"')
-"     call Decho("v:shell_error=".v:shell_error)
-
-    if v:shell_error != 0
-"      call Decho("2nd attempt to remove directory<".rmfile.">")
-     let errcode= s:System("delete",rmfile)
-"      call Decho("errcode=".errcode)
-
-     if errcode != 0
-      if has("unix")
-"        call Decho("3rd attempt to remove directory<".rmfile.">")
-       call s:System("system","rm ".rmfile)
-       if v:shell_error != 0 && !exists("g:netrw_quiet")
-	 call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
-       endif
-      elseif !exists("g:netrw_quiet")
-      	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
-      endif
-     endif
-    endif
-   endif
-  endif
-
-"  call Dret("s:NetrwLocalRmFile ".ok)
-  return ok
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwLocalRename: rename a remote file or directory {{{2
-fun! s:NetrwLocalRename(path) range
-"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
-
-  " preparation for removing multiple files/directories
-  let ctr  = a:firstline
-  let svpos= netrw#NetrwSavePosn()
-
-  " rename files given by the markfilelist
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   for oldname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("oldname<".oldname.">")
-    if exists("subfrom")
-     let newname= substitute(oldname,subfrom,subto,'')
-"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-    else
-     call inputsave()
-     let newname= input("Moving ".oldname." to : ",oldname)
-     call inputrestore()
-     if newname =~ '^s/'
-      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
-      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
-"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-      let newname = substitute(oldname,subfrom,subto,'')
-     endif
-    endif
-    let ret= rename(oldname,newname)
-   endfor
-   2match none
-   unlet s:netrwmarkfilelist_{bufnr("%")}
-   unlet s:netrwmarkfilemtch_{bufnr("%")}
-  
-  else
-
-   " attempt to rename files/directories
-   while ctr <= a:lastline
-    exe "keepjumps ".ctr
-
-    " sanity checks
-    if line(".") < w:netrw_bannercnt
-     let ctr= ctr + 1
-     continue
-    endif
-    let curword= s:NetrwGetWord()
-    if curword == "./" || curword == "../"
-     let ctr= ctr + 1
-     continue
-    endif
-
-    norm! 0
-    let oldname= s:ComposePath(a:path,curword)
-"   call Decho("oldname<".oldname.">")
-
-    call inputsave()
-    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
-    call inputrestore()
-
-    let ret= rename(oldname,newname)
-"   call Decho("renaming <".oldname."> to <".newname.">")
-
-    let ctr= ctr + 1
-   endwhile
-  endif
-
-  " refresh the directory
-"  call Decho("refresh the directory listing")
-  call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("NetrwLocalRename")
-endfun
-
-" ---------------------------------------------------------------------
-" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
-"
-"                 Directory Is
-"     fastbrowse  Local  Remote   
-"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
-"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
-"  fast   2         H      H      
-fun! s:LocalFastBrowser()
-"  call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse)
-
-  " initialize browselist, a list of buffer numbers that the local browser has used
-  if !exists("s:netrw_browselist")
-"   call Decho("initialize s:netrw_browselist")
-   let s:netrw_browselist= []
-  endif
-
-  " append current buffer to fastbrowse list
-  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
-"   call Decho("appendng current buffer to browselist")
-   call add(s:netrw_browselist,bufnr("%"))
-"   call Decho("browselist=".string(s:netrw_browselist))
-  endif
-
-  " enable autocmd events to handle refreshing/removing local browser buffers
-  "    If local browse buffer is currently showing: refresh it
-  "    If local browse buffer is currently hidden : wipe it
-  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
-"   call Decho("setting up local-browser shell command refresh")
-   let s:netrw_browser_shellcmd= 1
-   augroup AuNetrwShellCmd
-    au!
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-     au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
-    else
-     au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
-    endif
-   augroup END
-  endif
-
-  " user must have changed fastbrowse to its fast setting, so remove
-  " the associated autocmd events
-  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
-"   call Decho("remove AuNetrwShellCmd autcmd group")
-   unlet s:netrw_browser_shellcmd
-   augroup AuNetrwShellCmd
-    au!
-   augroup END
-   augroup! AuNetrwShellCmd
-  endif
-
-"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
-endfun
-
-" ---------------------------------------------------------------------
-" Support Functions: {{{1
-
-" ---------------------------------------------------------------------
-" s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2
-"                      The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function
-"                      can't be called except via emenu.  But due to locale, that menu line may not be called
-"                      Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
-fun! s:UpdateBuffersMenu()
-"  call Dfunc("s:UpdateBuffersMenu()")
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
-   try
-    silent emenu Buffers.Refresh\ menu
-   catch /^Vim\%((\a\+)\)\=:E/
-    let v:errmsg= ""
-    silent call s:NetrwBMShow()
-   endtry
-  endif
-"  call Dret("s:UpdateBuffersMenu")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwBMShow: {{{2
-fun! s:NetrwBMShow()
-"  call Dfunc("s:NetrwBMShow()")
-  redir => bmshowraw
-   menu
-  redir END
-  let bmshowlist = split(bmshowraw,'\n')
-  if bmshowlist != []
-   let bmshowfuncs= filter(bmshowlist,'v:val =~ "<SNR>\\d\\+_BMShow()"')
-   if bmshowfuncs != []
-    let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
-    if bmshowfunc =~ '^call.*BMShow()'
-     exe "silent! ".bmshowfunc
-    endif
-   endif
-  endif
-"  call Dret("s:NetrwBMShow : bmshowfunc<".bmshowfunc.">")
-endfun
-
-" ---------------------------------------------------------------------
-"  s:ComposePath: Appends a new part to a path taking different systems into consideration {{{2
-fun! s:ComposePath(base,subdir)
-"  call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
-  if(has("amiga"))
-   let ec = a:base[s:Strlen(a:base)-1]
-   if ec != '/' && ec != ':'
-    let ret = a:base . "/" . a:subdir
-   else
-    let ret = a:base . a:subdir
-   endif
-  elseif a:subdir =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16"))
-   let ret= a:subdir
-  elseif a:base =~ '^\a\+://'
-   let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','')
-   let curpath = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\2','')
-   let ret     = urlbase.curpath.a:subdir
-"   call Decho("urlbase<".urlbase.">")
-"   call Decho("curpath<".curpath.">")
-"   call Decho("ret<".ret.">")
-  else
-   let ret = substitute(a:base."/".a:subdir,"//","/","g")
-   if a:base =~ '^//'
-    " keeping initial '//' for the benefit of network share listing support
-    let ret= '/'.ret
-   endif
-  endif
-"  call Dret("s:ComposePath ".ret)
-  return ret
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#ErrorMsg: {{{2
-"   0=note     = s:NOTE
-"   1=warning  = s:WARNING
-"   2=error    = s:ERROR
-"  Sep 17, 2007 : max errnum currently is 60
-fun! netrw#ErrorMsg(level,msg,errnum)
-"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
-
-  if a:level == 1
-   let level= "**warning** (netrw) "
-  elseif a:level == 2
-   let level= "**error** (netrw) "
-  else
-   let level= "**note** (netrw) "
-  endif
-
-  if g:netrw_use_errorwindow
-   " (default) netrw creates a one-line window to show error/warning
-   " messages (reliably displayed)
-
-   " record current window number for NetrwRestorePosn()'s benefit
-   let s:winBeforeErr= winnr()
-
-   " getting messages out reliably is just plain difficult!
-   " This attempt splits the current window, creating a one line window.
-   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
-    exe bufwinnr("NetrwMessage")."wincmd w"
-    set ma noro
-"    call Decho("set ma noro")
-    call setline(line("$")+1,level.a:msg)
-    $
-   else
-    bo 1split
-    enew
-    setlocal bt=nofile
-    file NetrwMessage
-    call setline(line("$"),level.a:msg)
-   endif
-   if &fo !~ '[ta]'
-    syn clear
-    syn match netrwMesgNote	"^\*\*note\*\*"
-    syn match netrwMesgWarning	"^\*\*warning\*\*"
-    syn match netrwMesgError	"^\*\*error\*\*"
-    hi link netrwMesgWarning WarningMsg
-    hi link netrwMesgError   Error
-   endif
-   setlocal noma ro bh=wipe
-
-  else
-   " (optional) netrw will show messages using echomsg.  Even if the
-   " message doesn't appear, at least it'll be recallable via :messages
-"   redraw!
-   if a:level == s:WARNING
-    echohl WarningMsg
-   elseif a:level == s:ERROR
-    echohl Error
-   endif
-   echomsg level.a:msg
-"   call Decho("echomsg ***netrw*** ".a:msg)
-   echohl None
-  endif
-
-"  call Dret("netrw#ErrorMsg")
-endfun
-
-" ---------------------------------------------------------------------
-"  netrw#RFC2396: converts %xx into characters {{{2
-fun! netrw#RFC2396(fname)
-"  call Dfunc("netrw#RFC2396(fname<".a:fname.">)")
-  let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t")
-"  call Dret("netrw#RFC2396 ".fname)
-  return fname
-endfun
-
-" ---------------------------------------------------------------------
-" s:FileReadable: o/s independent filereadable {{{2
-fun! s:FileReadable(fname)
-"  call Dfunc("s:FileReadable(fname<".a:fname.">)")
-
-  if g:netrw_cygwin
-   let ret= filereadable(substitute(a:fname,'/cygdrive/\(.\)','\1:/',''))
-  else
-   let ret= filereadable(a:fname)
-  endif
-
-"  call Dret("s:FileReadable ".ret)
-  return ret
-endfun
-
-" ---------------------------------------------------------------------
-"  s:GetTempfile: gets a tempname that'll work for various o/s's {{{2
-"                 Places correct suffix on end of temporary filename,
-"                 using the suffix provided with fname
-fun! s:GetTempfile(fname)
-"  call Dfunc("s:GetTempfile(fname<".a:fname.">)")
-
-  if !exists("b:netrw_tmpfile")
-   " get a brand new temporary filename
-   let tmpfile= tempname()
-"   call Decho("tmpfile<".tmpfile."> : from tempname()")
-
-   let tmpfile= escape(substitute(tmpfile,'\','/','ge'),g:netrw_tmpfile_escape)
-"   call Decho("tmpfile<".tmpfile."> : chgd any \\ -> /")
-
-   " sanity check -- does the temporary file's directory exist?
-   if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
-"    call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-    call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
-"    call Dret("s:GetTempfile getcwd<".getcwd().">")
-    return ""
-   endif
-
-   " let netrw#NetSource() know about the tmpfile
-   let s:netrw_tmpfile= tmpfile " used by netrw#NetSource()
-"   call Decho("tmpfile<".tmpfile."> s:netrw_tmpfile<".s:netrw_tmpfile.">")
-
-   " o/s dependencies
-   if g:netrw_cygwin != 0
-    let tmpfile = substitute(tmpfile,'^\(\a\):','/cygdrive/\1','e')
-   elseif has("win32") || has("win95") || has("win64") || has("win16")
-    if !exists("+shellslash") || !&ssl
-     let tmpfile = substitute(tmpfile,'/','\','g')
-    endif
-   else
-    let tmpfile = tmpfile
-   endif
-   let b:netrw_tmpfile= tmpfile
-"   call Decho("o/s dependent fixed tempname<".tmpfile.">")
-  else
-   " re-use temporary filename
-   let tmpfile= b:netrw_tmpfile
-"   call Decho("tmpfile<".tmpfile."> re-using")
-  endif
-
-  " use fname's suffix for the temporary file
-  if a:fname != ""
-   if a:fname =~ '\.[^./]\+$'
-"    call Decho("using fname<".a:fname.">'s suffix")
-    if a:fname =~ '.tar.gz' || a:fname =~ '.tar.bz2'
-     let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
-    else
-     let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
-    endif
-    let suffix = escape(suffix,g:netrw_tmpfile_escape)
-"    call Decho("suffix<".suffix.">")
-    let tmpfile= substitute(tmpfile,'\.tmp$','','e')
-"    call Decho("chgd tmpfile<".tmpfile."> (removed any .tmp suffix)")
-    let tmpfile .= suffix
-"    call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
-    let s:netrw_tmpfile= tmpfile " supports netrw#NetSource()
-   endif
-  endif
-
-"  call Decho("ro=".&ro." ma=".&ma." mod=".&mod." wrap=".&wrap)
-"  call Dret("s:GetTempfile <".tmpfile.">")
-  return tmpfile
-endfun
-
-" ---------------------------------------------------------------------
-" s:MakeSshCmd: transforms input command using USEPORT HOSTNAME into {{{2
-"               a correct command
-fun! s:MakeSshCmd(sshcmd)
-"  call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">)")
-  let sshcmd = substitute(a:sshcmd,'\<HOSTNAME\>',s:user.s:machine,'')
-  if exists("g:netrw_port") && g:netrw_port != ""
-   let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'')
-  elseif exists("s:port") && s:port != ""
-   let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.s:port,'')
-  else
-   let sshcmd= substitute(sshcmd,"USEPORT ",'','')
-  endif
-"  call Dret("s:MakeSshCmd <".sshcmd.">")
-  return sshcmd
-endfun
-
-" ---------------------------------------------------------------------
-" s:RemoteSystem: runs a command on a remote host using ssh {{{2
-"                 Returns status
-fun! s:RemoteSystem(cmd)
-"  call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)")
-  if !executable(g:netrw_ssh_cmd)
-   call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
-  elseif !exists("b:netrw_curdir")
-   call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
-  else
-   let cmd      = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME")
-   let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
-   if remotedir != ""
-    let cmd= cmd.' "lcd '."'".remotedir."';"
-   else
-    let cmd= cmd.' "'
-   endif
-   let cmd= cmd.a:cmd.'"'
-"   call Decho("call system(".cmd.")")
-   let ret= system(cmd)
-  endif
-"  call Dret("s:RemoteSystem ".ret)
-  return ret
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
-fun! s:NetrwEnew(curdir)
-"  call Dfunc("s:NetrwEnew(curdir<".a:curdir.">) buf#".bufnr("%")."<".bufname("%").">")
-
-  " grab a function-local-variable copy of buffer variables
-  if exists("b:netrw_bannercnt")      |let netrw_bannercnt       = b:netrw_bannercnt      |endif
-  if exists("b:netrw_browser_active") |let netrw_browser_active  = b:netrw_browser_active |endif
-  if exists("b:netrw_cpf")            |let netrw_cpf             = b:netrw_cpf            |endif
-  if exists("b:netrw_curdir")         |let netrw_curdir          = b:netrw_curdir         |endif
-  if exists("b:netrw_explore_bufnr")  |let netrw_explore_bufnr   = b:netrw_explore_bufnr  |endif
-  if exists("b:netrw_explore_indx")   |let netrw_explore_indx    = b:netrw_explore_indx   |endif
-  if exists("b:netrw_explore_line")   |let netrw_explore_line    = b:netrw_explore_line   |endif
-  if exists("b:netrw_explore_list")   |let netrw_explore_list    = b:netrw_explore_list   |endif
-  if exists("b:netrw_explore_listlen")|let netrw_explore_listlen = b:netrw_explore_listlen|endif
-  if exists("b:netrw_explore_mtchcnt")|let netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
-  if exists("b:netrw_fname")          |let netrw_fname           = b:netrw_fname          |endif
-  if exists("b:netrw_lastfile")       |let netrw_lastfile        = b:netrw_lastfile       |endif
-  if exists("b:netrw_liststyle")      |let netrw_liststyle       = b:netrw_liststyle      |endif
-  if exists("b:netrw_method")         |let netrw_method          = b:netrw_method         |endif
-  if exists("b:netrw_option")         |let netrw_option          = b:netrw_option         |endif
-  if exists("b:netrw_prvdir")         |let netrw_prvdir          = b:netrw_prvdir         |endif
-
-  call s:NetrwOptionRestore("w:")
-"  call Decho("generate a buffer with keepjumps keepalt enew!")
-  keepjumps keepalt enew!
-  call s:NetrwOptionSave("w:")
-
-  " copy function-local-variables to buffer variable equivalents
-  if exists("netrw_bannercnt")      |let b:netrw_bannercnt       = netrw_bannercnt      |endif
-  if exists("netrw_browser_active") |let b:netrw_browser_active  = netrw_browser_active |endif
-  if exists("netrw_cpf")            |let b:netrw_cpf             = netrw_cpf            |endif
-  if exists("netrw_curdir")         |let b:netrw_curdir          = netrw_curdir         |endif
-  if exists("netrw_explore_bufnr")  |let b:netrw_explore_bufnr   = netrw_explore_bufnr  |endif
-  if exists("netrw_explore_indx")   |let b:netrw_explore_indx    = netrw_explore_indx   |endif
-  if exists("netrw_explore_line")   |let b:netrw_explore_line    = netrw_explore_line   |endif
-  if exists("netrw_explore_list")   |let b:netrw_explore_list    = netrw_explore_list   |endif
-  if exists("netrw_explore_listlen")|let b:netrw_explore_listlen = netrw_explore_listlen|endif
-  if exists("netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = netrw_explore_mtchcnt|endif
-  if exists("netrw_fname")          |let b:netrw_fname           = netrw_fname          |endif
-  if exists("netrw_lastfile")       |let b:netrw_lastfile        = netrw_lastfile       |endif
-  if exists("netrw_liststyle")      |let b:netrw_liststyle       = netrw_liststyle      |endif
-  if exists("netrw_method")         |let b:netrw_method          = netrw_method         |endif
-  if exists("netrw_option")         |let b:netrw_option          = netrw_option         |endif
-  if exists("netrw_prvdir")         |let b:netrw_prvdir          = netrw_prvdir         |endif
-
-  let b:netrw_curdir= a:curdir
-  if b:netrw_curdir =~ '/$'
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-    file NetrwTreeListing
-    nno <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
-    nno <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
-   else
-    exe "silent! keepalt file ".b:netrw_curdir
-   endif
-  endif
-
-"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
-endfun
-
-" ------------------------------------------------------------------------
-" netrw#NetrwSavePosn: saves position of cursor on screen {{{2
-fun! netrw#NetrwSavePosn()
-"  call Dfunc("netrw#NetrwSavePosn()")
-  " Save current line and column
-  let w:netrw_winnr= winnr()
-  let w:netrw_line = line(".")
-  let w:netrw_col  = virtcol(".")
-
-  " Save top-of-screen line
-  norm! H0
-  let w:netrw_hline= line(".")
-
-  " set up string holding position parameters
-  let ret          = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline
-
-  call netrw#NetrwRestorePosn()
-"  call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
-  return ret
-endfun
-
-" ------------------------------------------------------------------------
-" netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2
-fun! netrw#NetrwRestorePosn(...)
-"  call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1))
-  let eikeep= &ei
-  set ei=all
-  if expand("%") == "NetrwMessage"
-   exe s:winBeforeErr."wincmd w"
-  endif
-
-  if a:0 > 0
-   exe a:1
-  endif
-
-  " restore window
-  if exists("w:netrw_winnr")
-"   call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
-   exe "silent! ".w:netrw_winnr."wincmd w"
-  endif
-  if v:shell_error == 0
-   " as suggested by Bram M: redraw on no error
-   " allows protocol error messages to remain visible
-"   redraw!
-  endif
-
-  " restore top-of-screen line
-  if exists("w:netrw_hline")
-"   call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
-   exe "norm! ".w:netrw_hline."G0z\<CR>"
-  endif
-
-  " restore position
-  if exists("w:netrw_line") && exists("w:netrw_col")
-"   call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
-   exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
-  endif
-
-  let &ei= eikeep
-"  call Dret("netrw#NetrwRestorePosn")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2
-" changed sorting, etc.  Also see s:NetrwRestoreWordPosn().
-fun! s:NetrwSaveWordPosn()
-"  call Dfunc("NetrwSaveWordPosn()")
-  let s:netrw_saveword= '^'.escape(getline("."),g:netrw_cd_escape).'$'
-"  call Dret("NetrwSaveWordPosn : saveword<".s:netrw_saveword.">")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwRestoreWordPosn: used to keep cursor on same word after refresh, {{{2
-"  changed sorting, etc.  Also see s:NetrwSaveWordPosn().
-fun! s:NetrwRestoreWordPosn()
-"  call Dfunc("NetrwRestoreWordPosn()")
-  silent! call search(s:netrw_saveword,'w')
-"  call Dret("NetrwRestoreWordPosn")
-endfun
-
-" ---------------------------------------------------------------------
-" s:RemotePathAnalysis: {{{2
-fun! s:RemotePathAnalysis(dirname)
-"  call Dfunc("s:RemotePathAnalysis()")
-
-  let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$'
-  let s:method  = substitute(a:dirname,dirpat,'\1','')
-  let s:user    = substitute(a:dirname,dirpat,'\2','')
-  let s:machine = substitute(a:dirname,dirpat,'\3','')
-  let s:port    = substitute(a:dirname,dirpat,'\4','')
-  let s:path    = substitute(a:dirname,dirpat,'\5','')
-  let s:fname   = substitute(a:dirname,'^.*/\ze.','','')
-
-"  call Decho("set up s:method <".s:method .">")
-"  call Decho("set up s:user   <".s:user   .">")
-"  call Decho("set up s:machine<".s:machine.">")
-"  call Decho("set up s:port   <".s:port.">")
-"  call Decho("set up s:path   <".s:path   .">")
-"  call Decho("set up s:fname  <".s:fname  .">")
-
-"  call Dret("s:RemotePathAnalysis")
-endfun
-
-" ---------------------------------------------------------------------
-" s:RestoreBufVars: {{{2
-fun! s:RestoreBufVars()
-"  call Dfunc("s:RestoreBufVars()")
-
-  if exists("s:netrw_curdir")        |let b:netrw_curdir         = s:netrw_curdir        |endif
-  if exists("s:netrw_lastfile")      |let b:netrw_lastfile       = s:netrw_lastfile      |endif
-  if exists("s:netrw_method")        |let b:netrw_method         = s:netrw_method        |endif
-  if exists("s:netrw_fname")         |let b:netrw_fname          = s:netrw_fname         |endif
-  if exists("s:netrw_machine")       |let b:netrw_machine        = s:netrw_machine       |endif
-  if exists("s:netrw_browser_active")|let b:netrw_browser_active = s:netrw_browser_active|endif
-
-"  call Dret("s:RestoreBufVars")
-endfun
-
-" ---------------------------------------------------------------------
-" s:RestoreWinVars: (used by Explore() and NetrwSplit()) {{{2
-fun! s:RestoreWinVars()
-"  call Dfunc("s:RestoreWinVars()")
-  if exists("s:bannercnt")      |let w:netrw_bannercnt       = s:bannercnt      |unlet s:bannercnt      |endif
-  if exists("s:col")            |let w:netrw_col             = s:col            |unlet s:col            |endif
-  if exists("s:curdir")         |let w:netrw_curdir          = s:curdir         |unlet s:curdir         |endif
-  if exists("s:explore_bufnr")  |let w:netrw_explore_bufnr   = s:explore_bufnr  |unlet s:explore_bufnr  |endif
-  if exists("s:explore_indx")   |let w:netrw_explore_indx    = s:explore_indx   |unlet s:explore_indx   |endif
-  if exists("s:explore_line")   |let w:netrw_explore_line    = s:explore_line   |unlet s:explore_line   |endif
-  if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
-  if exists("s:explore_list")   |let w:netrw_explore_list    = s:explore_list   |unlet s:explore_list   |endif
-  if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
-  if exists("s:fpl")            |let w:netrw_fpl             = s:fpl            |unlet s:fpl            |endif
-  if exists("s:hline")          |let w:netrw_hline           = s:hline          |unlet s:hline          |endif
-  if exists("s:line")           |let w:netrw_line            = s:line           |unlet s:line           |endif
-  if exists("s:liststyle")      |let w:netrw_liststyle       = s:liststyle      |unlet s:liststyle      |endif
-  if exists("s:method")         |let w:netrw_method          = s:method         |unlet s:method         |endif
-  if exists("s:prvdir")         |let w:netrw_prvdir          = s:prvdir         |unlet s:prvdir         |endif
-  if exists("s:treedict")       |let w:netrw_treedict        = s:treedict       |unlet s:treedict       |endif
-  if exists("s:treetop")        |let w:netrw_treetop         = s:treetop        |unlet s:treetop        |endif
-  if exists("s:winnr")          |let w:netrw_winnr           = s:winnr          |unlet s:winnr          |endif
-"  call Dret("s:RestoreWinVars")
-endfun
-
-" ---------------------------------------------------------------------
-" s:SaveBufVars: {{{2
-fun! s:SaveBufVars()
-"  call Dfunc("s:SaveBufVars()")
-
-  if exists("b:netrw_curdir")        |let s:netrw_curdir         = b:netrw_curdir        |endif
-  if exists("b:netrw_lastfile")      |let s:netrw_lastfile       = b:netrw_lastfile      |endif
-  if exists("b:netrw_method")        |let s:netrw_method         = b:netrw_method        |endif
-  if exists("b:netrw_fname")         |let s:netrw_fname          = b:netrw_fname         |endif
-  if exists("b:netrw_machine")       |let s:netrw_machine        = b:netrw_machine       |endif
-  if exists("b:netrw_browser_active")|let s:netrw_browser_active = b:netrw_browser_active|endif
-
-"  call Dret("s:SaveBufVars")
-endfun
-
-" ---------------------------------------------------------------------
-" s:SaveWinVars: (used by Explore() and NetrwSplit()) {{{2
-fun! s:SaveWinVars()
-"  call Dfunc("s:SaveWinVars()")
-  if exists("w:netrw_bannercnt")      |let s:bannercnt       = w:netrw_bannercnt      |endif
-  if exists("w:netrw_col")            |let s:col             = w:netrw_col            |endif
-  if exists("w:netrw_curdir")         |let s:curdir          = w:netrw_curdir         |endif
-  if exists("w:netrw_explore_bufnr")  |let s:explore_bufnr   = w:netrw_explore_bufnr  |endif
-  if exists("w:netrw_explore_indx")   |let s:explore_indx    = w:netrw_explore_indx   |endif
-  if exists("w:netrw_explore_line")   |let s:explore_line    = w:netrw_explore_line   |endif
-  if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
-  if exists("w:netrw_explore_list")   |let s:explore_list    = w:netrw_explore_list   |endif
-  if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
-  if exists("w:netrw_fpl")            |let s:fpl             = w:netrw_fpl            |endif
-  if exists("w:netrw_hline")          |let s:hline           = w:netrw_hline          |endif
-  if exists("w:netrw_line")           |let s:line            = w:netrw_line           |endif
-  if exists("w:netrw_liststyle")      |let s:liststyle       = w:netrw_liststyle      |endif
-  if exists("w:netrw_method")         |let s:method          = w:netrw_method         |endif
-  if exists("w:netrw_prvdir")         |let s:prvdir          = w:netrw_prvdir         |endif
-  if exists("w:netrw_treedict")       |let s:treedict        = w:netrw_treedict       |endif
-  if exists("w:netrw_treetop")        |let s:treetop         = w:netrw_treetop        |endif
-  if exists("w:netrw_winnr")          |let s:winnr           = w:netrw_winnr          |endif
-"  call Dret("s:SaveWinVars")
-endfun
-
-" ---------------------------------------------------------------------
-" s:SetBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck()) {{{2
-"   To allow separate windows to have their own activities, such as
-"   Explore **/pattern, several variables have been made window-oriented.
-"   However, when the user splits a browser window (ex: ctrl-w s), these
-"   variables are not inherited by the new window.  SetBufWinVars() and
-"   UseBufWinVars() get around that.
-fun! s:SetBufWinVars()
-"  call Dfunc("s:SetBufWinVars()")
-  if exists("w:netrw_liststyle")      |let b:netrw_liststyle      = w:netrw_liststyle      |endif
-  if exists("w:netrw_bannercnt")      |let b:netrw_bannercnt      = w:netrw_bannercnt      |endif
-  if exists("w:netrw_method")         |let b:netrw_method         = w:netrw_method         |endif
-  if exists("w:netrw_prvdir")         |let b:netrw_prvdir         = w:netrw_prvdir         |endif
-  if exists("w:netrw_explore_indx")   |let b:netrw_explore_indx   = w:netrw_explore_indx   |endif
-  if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen= w:netrw_explore_listlen|endif
-  if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt= w:netrw_explore_mtchcnt|endif
-  if exists("w:netrw_explore_bufnr")  |let b:netrw_explore_bufnr  = w:netrw_explore_bufnr  |endif
-  if exists("w:netrw_explore_line")   |let b:netrw_explore_line   = w:netrw_explore_line   |endif
-  if exists("w:netrw_explore_list")   |let b:netrw_explore_list   = w:netrw_explore_list   |endif
-"  call Dret("s:SetBufWinVars")
-endfun
-
-" ---------------------------------------------------------------------
-" s:SetRexDir: set directory for :Rexplore {{{2
-fun! s:SetRexDir(islocal,dirname)
-"  call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)")
-  " set up Rex and leftmouse-double-click
-  if a:islocal
-   exe 'com! Rexplore call netrw#LocalBrowseCheck("'.escape(a:dirname,g:netrw_cd_escape).'")'
-   if g:netrw_retmap
-    silent! unmap <2-leftmouse>
-    if !hasmapto("<Plug>NetrwReturn")
-     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
-    endif
-    exe 'nnoremap <silent> <Plug>NetrwReturn :call netrw#LocalBrowseCheck("'.a:dirname.'")<cr>'
-   endif
-  else
-   exe 'com! Rexplore call s:NetrwBrowse(0,"'.escape(a:dirname,g:netrw_cd_escape).'")'
-   if g:netrw_retmap
-    silent! unmap <2-leftmouse>
-    if !hasmapto("<Plug>NetrwReturn")
-     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
-    endif
-    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwBrowse(0,"'.a:dirname.'")<cr>'
-   endif
-  endif
-"  call Dret("s:SetRexDir")
-endfun
-
-" ---------------------------------------------------------------------
-" s:Strlen: this function returns the length of a string, even if its {{{2
-"           using two-byte etc characters.  Depends on virtcol().
-"           Currently, its only used if g:Align_xstrlen is set to a
-"           nonzero value.
-fun! s:Strlen(x)
-"  call Dfunc("s:Strlen(x<".a:x.">")
-  let ret= strlen(substitute(a:x,'.','c','g'))
-"  call Dret("s:Strlen ".ret)
-  return ret
-endfun
-
-" ---------------------------------------------------------------------
-" s:System: using Steve Hall's idea to insure that Windows paths stay {{{2
-"              acceptable.  No effect on Unix paths.
-"  Examples of use:  let result= s:System("system",path)
-"                    let result= s:System("delete",path)
-fun! s:System(cmd,path)
-"  call Dfunc("s:System(cmd<".a:cmd."> path<".a:path.">)")
-
-  let path = a:path
-  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
-   " system call prep
-   " remove trailing slash (Win95)
-   let path = substitute(path, '\(\\\|/\)$', '', 'g')
-   " remove escaped spaces
-   let path = substitute(path, '\ ', ' ', 'g')
-   " convert slashes to backslashes
-   let path = substitute(path, '/', '\', 'g')
-   if exists("+shellslash")
-    let sskeep= &shellslash
-    setlocal noshellslash
-    exe "let result= ".a:cmd."('".path."')"
-    let &shellslash = sskeep
-   else
-    exe "let result= ".a:cmd."(".g:netrw_shq.path.g:netrw_shq.")"
-   endif
-  else
-   exe "let result= ".a:cmd."('".path."')"
-  endif
-
-"  call Dret("s:System result<".result.">")
-  return result
-endfun
-
-" ---------------------------------------------------------------------
-" s:TreeListMove: {{{2
-fun! s:TreeListMove(dir)
-"  call Dfunc("s:TreeListMove(dir<".a:dir.">)")
-  let curline  = getline(".")
-  let prvline  = (line(".") > 1)?         getline(line(".")-1) : ''
-  let nxtline  = (line(".") < line("$"))? getline(line(".")+1) : ''
-  let curindent= substitute(curline,'^\([| ]*\).\{-}$','\1','')
-  let indentm1 = substitute(curindent,'^| ','','')
-"  call Decho("prvline  <".prvline."> #".line(".")-1)
-"  call Decho("curline  <".curline."> #".line("."))
-"  call Decho("nxtline  <".nxtline."> #".line(".")+1)
-"  call Decho("curindent<".curindent.">")
-"  call Decho("indentm1 <".indentm1.">")
-
-  if curline !~ '/$'
-"   call Decho('regfile')
-   if     a:dir == '[' && prvline != ''
-    norm! 0
-    let nl = search('^'.indentm1.'[^|]','bWe')    " search backwards from regular file
-"    call Decho("regfile srch back: ".nl)
-   elseif a:dir == ']' && nxtline != ''
-    norm! $
-    let nl = search('^'.indentm1.'[^|]','We')     " search forwards from regular file
-"    call Decho("regfile srch fwd: ".nl)
-   endif
-
-  elseif a:dir == '[' && prvline != ''
-   norm! 0
-   let curline= line(".")
-   let nl     = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation
-"   call Decho("dir srch back ind: ".nl)
-   if nl != 0
-    if line(".") == curline-1
-     let nl= search('^'.indentm1.'[^|]','bWe')     " search backwards from directory, indentation - 1
-"     call Decho("dir srch back ind-1: ".nl)
-    endif
-   endif
-
-  elseif a:dir == ']' && nxtline != ''
-   norm! $
-   let curline = line(".")
-   let nl      = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation
-"   call Decho("dir srch fwd ind: ".nl)
-   if nl != 0
-    if line(".") == curline+1
-     let nl= search('^'.indentm1.'[^|]','We')         " search forwards from directory, indentation - 1
-"     call Decho("dir srch fwd ind-1: ".nl)
-    endif
-   endif
-
-  endif
-
-"  call Dret("s:TreeListMove")
-endfun
-
-" ---------------------------------------------------------------------
-" s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
-"              Matching function to BufferWinVars()
-fun! s:UseBufWinVars()
-"  call Dfunc("s:UseBufWinVars()")
-  if exists("b:netrw_liststyle")       && !exists("w:netrw_liststyle")      |let w:netrw_liststyle       = b:netrw_liststyle      |endif
-  if exists("b:netrw_bannercnt")       && !exists("w:netrw_bannercnt")      |let w:netrw_bannercnt       = b:netrw_bannercnt      |endif
-  if exists("b:netrw_method")          && !exists("w:netrw_method")         |let w:netrw_method          = b:netrw_method         |endif
-  if exists("b:netrw_prvdir")          && !exists("w:netrw_prvdir")         |let w:netrw_prvdir          = b:netrw_prvdir         |endif
-  if exists("b:netrw_explore_indx")    && !exists("w:netrw_explore_indx")   |let w:netrw_explore_indx    = b:netrw_explore_indx   |endif
-  if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif
-  if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
-  if exists("b:netrw_explore_bufnr")   && !exists("w:netrw_explore_bufnr")  |let w:netrw_explore_bufnr   = b:netrw_explore_bufnr  |endif
-  if exists("b:netrw_explore_line")    && !exists("w:netrw_explore_line")   |let w:netrw_explore_line    = b:netrw_explore_line   |endif
-  if exists("b:netrw_explore_list")    && !exists("w:netrw_explore_list")   |let w:netrw_explore_list    = b:netrw_explore_list   |endif
-"  call Dret("s:UseBufWinVars")
-endfun
-
-" ---------------------------------------------------------------------
-" Settings Restoration: {{{2
-let &cpo= s:keepcpo
-unlet s:keepcpo
-
-" ------------------------------------------------------------------------
-" Modelines: {{{1
-" vim:ts=8 fdm=marker
+" netrw.vim: Handles file transfer and remote directory listing across
+"            AUTOLOAD SECTION
+" Date:		Sep 02, 2008
+" Version:	133
+" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
+" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{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 come 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.
+"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
+endif
+if !exists("s:NOTE")
+ let s:NOTE    = 0
+ let s:WARNING = 1
+ let s:ERROR   = 2
+endif
+let g:loaded_netrw = "v133"
+
+" sanity checks
+if v:version < 700
+ call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
+ finish
+endif
+
+let s:keepcpo= &cpo
+setlocal cpo&vim
+"DechoTabOn
+"call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
+
+" ======================
+"  Netrw Variables: {{{1
+" ======================
+
+" ---------------------------------------------------------------------
+"  Netrw Constants: {{{2
+if !exists("g:NETRW_BOOKMARKMAX")
+ let g:NETRW_BOOKMARKMAX= 0
+endif
+if !exists("g:NETRW_DIRHIST_CNT")
+ let g:NETRW_DIRHIST_CNT= 0
+endif
+if !exists("s:LONGLIST")
+ let s:THINLIST = 0
+ let s:LONGLIST = 1
+ let s:WIDELIST = 2
+ let s:TREELIST = 3
+ let s:MAXLIST  = 4
+endif
+
+" ---------------------------------------------------------------------
+" Default values for netrw's global protocol variables {{{2
+if !exists("g:netrw_dav_cmd")
+  let g:netrw_dav_cmd	= "cadaver"
+endif
+if !exists("g:netrw_fetch_cmd")
+ if executable("fetch")
+  let g:netrw_fetch_cmd	= "fetch -o"
+ else
+  let g:netrw_fetch_cmd	= ""
+ endif
+endif
+if !exists("g:netrw_ftp_cmd")
+  let g:netrw_ftp_cmd	= "ftp"
+endif
+if !exists("g:netrw_http_cmd")
+ if executable("elinks")
+  let g:netrw_http_cmd = "elinks"
+  let g:netrw_http_xcmd= "-dump >"
+ elseif executable("links")
+  let g:netrw_http_cmd = "links"
+  let g:netrw_http_xcmd= "-dump >"
+ elseif executable("curl")
+  let g:netrw_http_cmd	= "curl -o"
+ elseif executable("wget")
+  let g:netrw_http_cmd	= "wget -q -O"
+ elseif executable("fetch")
+  let g:netrw_http_cmd	= "fetch -o"
+ else
+  let g:netrw_http_cmd	= ""
+ endif
+endif
+if !exists("g:netrw_rcp_cmd")
+  let g:netrw_rcp_cmd	= "rcp"
+endif
+if !exists("g:netrw_rsync_cmd")
+  let g:netrw_rsync_cmd	= "rsync"
+endif
+if !exists("g:netrw_scp_cmd")
+  let g:netrw_scp_cmd	= "scp -q"
+endif
+if !exists("g:netrw_sftp_cmd")
+  let g:netrw_sftp_cmd	= "sftp"
+endif
+if !exists("g:netrw_ssh_cmd")
+ let g:netrw_ssh_cmd= "ssh"
+endif
+
+if (has("win32") || has("win95") || has("win64") || has("win16"))
+  \ && exists("g:netrw_use_nt_rcp")
+  \ && g:netrw_use_nt_rcp
+  \ && executable( $SystemRoot .'/system32/rcp.exe')
+ let s:netrw_has_nt_rcp = 1
+ let s:netrw_rcpmode    = '-b'
+else
+ let s:netrw_has_nt_rcp = 0
+ let s:netrw_rcpmode    = ''
+endif
+
+" ---------------------------------------------------------------------
+" Default values for netrw's global variables {{{2
+" Cygwin Detection ------- {{{3
+if !exists("g:netrw_cygwin")
+ if has("win32") || has("win95") || has("win64") || has("win16")
+  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+   let g:netrw_cygwin= 1
+  else
+   let g:netrw_cygwin= 0
+  endif
+ else
+  let g:netrw_cygwin= 0
+ endif
+endif
+" Default values - a-c ---------- {{{3
+if !exists("g:netrw_alto")
+ let g:netrw_alto= &sb
+endif
+if !exists("g:netrw_altv")
+ let g:netrw_altv= &spr
+endif
+if !exists("g:netrw_browse_split")
+ let g:netrw_browse_split= 0
+endif
+if !exists("g:netrw_chgwin")
+ let g:netrw_chgwin    = -1
+endif
+if !exists("g:netrw_compress")
+ let g:netrw_compress= "gzip"
+endif
+if !exists("g:netrw_ctags")
+ let g:netrw_ctags= "ctags"
+endif
+if !exists("g:netrw_cursorline")
+ let g:netrw_cursorline= 1
+ let s:netrw_usercul   = &cursorline
+ let s:netrw_usercuc   = &cursorcolumn
+endif
+" Default values - d-g ---------- {{{3
+if !exists("g:NETRW_DIRHIST_CNT")
+ let g:NETRW_DIRHIST_CNT= 0
+endif
+if !exists("g:netrw_decompress")
+ let g:netrw_decompress= { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
+endif
+if !exists("g:netrw_dirhistmax")
+ let g:netrw_dirhistmax= 10
+endif
+if !exists("g:netrw_fastbrowse")
+ let g:netrw_fastbrowse= 1
+endif
+if !exists("g:netrw_ftp_browse_reject")
+ let g:netrw_ftp_browse_reject='^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$'
+endif
+if !exists("g:netrw_ftp_list_cmd")
+ if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
+  let g:netrw_ftp_list_cmd     = "ls -lF"
+  let g:netrw_ftp_timelist_cmd = "ls -tlF"
+  let g:netrw_ftp_sizelist_cmd = "ls -slF"
+ else
+  let g:netrw_ftp_list_cmd     = "dir"
+  let g:netrw_ftp_timelist_cmd = "dir"
+  let g:netrw_ftp_sizelist_cmd = "dir"
+ endif
+endif
+if !exists("g:netrw_ftpmode")
+ let g:netrw_ftpmode= "binary"
+endif
+" Default values - h-lh ---------- {{{3
+if !exists("g:netrw_hide")
+ let g:netrw_hide= 1
+endif
+if !exists("g:netrw_ignorenetrc")
+ if &shell =~ '\c\<\%(cmd\|4nt\)\.exe$'
+  let g:netrw_ignorenetrc= 1
+ else
+  let g:netrw_ignorenetrc= 0
+ endif
+endif
+if !exists("g:netrw_keepdir")
+ let g:netrw_keepdir= 1
+endif
+if !exists("g:netrw_list_cmd")
+ if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
+  " provide a 'pscp' listing command
+  if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk")
+   let g:netrw_scp_cmd ="pscp -i C:\\private.ppk"
+  endif
+  let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:"
+ elseif executable(g:netrw_ssh_cmd)
+  " provide a default listing command
+  let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa"
+ else
+"  call Decho(g:netrw_ssh_cmd." is not executable")
+  let g:netrw_list_cmd= ""
+ endif
+endif
+if !exists("g:netrw_list_hide")
+ let g:netrw_list_hide= ""
+endif
+" Default values - lh-lz ---------- {{{3
+if !exists("g:netrw_localcopycmd")
+ if has("win32") || has("win95") || has("win64") || has("win16")
+  if g:netrw_cygwin
+   let g:netrw_localcopycmd= "cp"
+  else
+   let g:netrw_localcopycmd= "copy"
+  endif
+ elseif has("unix") || has("macunix")
+  let g:netrw_localcopycmd= "cp"
+ else
+  let g:netrw_localcopycmd= ""
+ endif
+endif
+if !exists("g:netrw_local_mkdir")
+ let g:netrw_local_mkdir= "mkdir"
+endif
+if !exists("g:netrw_localmovecmd")
+ if has("win32") || has("win95") || has("win64") || has("win16")
+  if g:netrw_cygwin
+   let g:netrw_localmovecmd= "mv"
+  else
+   let g:netrw_localmovecmd= "move"
+  endif
+ elseif has("unix") || has("macunix")
+  let g:netrw_localmovecmd= "mv"
+ else
+  let g:netrw_localmovecmd= ""
+ endif
+endif
+if !exists("g:netrw_local_rmdir")
+ let g:netrw_local_rmdir= "rmdir"
+endif
+if !exists("g:netrw_liststyle")
+ let g:netrw_liststyle= s:THINLIST
+endif
+if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
+ " sanity check
+ let g:netrw_liststyle= s:THINLIST
+endif
+if g:netrw_liststyle == s:LONGLIST && g:netrw_scp_cmd !~ '^pscp'
+ let g:netrw_list_cmd= g:netrw_list_cmd." -l"
+endif
+" Default values - m-r ---------- {{{3
+if !exists("g:netrw_markfileesc")
+ let g:netrw_markfileesc= '*./[\~'
+endif
+if !exists("g:netrw_maxfilenamelen")
+ let g:netrw_maxfilenamelen= 32
+endif
+if !exists("g:netrw_menu")
+ let g:netrw_menu= 1
+endif
+if !exists("g:netrw_mkdir_cmd")
+ let g:netrw_mkdir_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir"
+endif
+if !exists("g:netrw_mousemaps")
+ if exists("&mouse") && &mouse =~ '[anh]'
+  let g:netrw_mousemaps= 1
+ else
+  let g:netrw_mousemaps= 0
+ endif
+endif
+if !exists("g:netrw_retmap")
+ let g:netrw_retmap= 0
+endif
+if !exists("g:netrw_preview")
+ let g:netrw_preview= 0
+endif
+if !exists("g:netrw_scpport")
+ let g:netrw_scpport= "-P"
+endif
+if !exists("g:netrw_sshport")
+ let g:netrw_sshport= "-p"
+endif
+if !exists("g:netrw_rename_cmd")
+ let g:netrw_rename_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME mv"
+endif
+if !exists("g:netrw_rm_cmd")
+ let g:netrw_rm_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm"
+endif
+if !exists("g:netrw_rmdir_cmd")
+ let g:netrw_rmdir_cmd = g:netrw_ssh_cmd." USEPORT HOSTNAME rmdir"
+endif
+if !exists("g:netrw_rmf_cmd")
+ let g:netrw_rmf_cmd    = g:netrw_ssh_cmd." USEPORT HOSTNAME rm -f"
+endif
+" Default values - s ---------- {{{3
+ " set up shell quoting character
+if exists("g:netrw_silent") && g:netrw_silent != 0
+ let s:netrw_silentxfer= "silent "
+else
+ let s:netrw_silentxfer= ""
+endif
+if !exists("g:netrw_sort_by")
+ " alternatives: date size
+ let g:netrw_sort_by= "name"
+endif
+if !exists("g:netrw_sort_options")
+ let g:netrw_sort_options= ""
+endif
+if !exists("g:netrw_sort_direction")
+ " alternative: reverse  (z y x ...)
+ let g:netrw_sort_direction= "normal"
+endif
+if !exists("g:netrw_sort_sequence")
+ let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
+endif
+if !exists("g:netrw_special_syntax")
+ let g:netrw_special_syntax= 0
+endif
+if !exists("g:netrw_ssh_browse_reject")
+  let g:netrw_ssh_browse_reject='^total\s\+\d\+$'
+endif
+if !has("patch192")
+ if !exists("g:netrw_use_noswf")
+  let g:netrw_use_noswf= 1
+ endif
+else
+  let g:netrw_use_noswf= 0
+endif
+" Default values - t-w ---------- {{{3
+if !exists("g:netrw_timefmt")
+ let g:netrw_timefmt= "%c"
+endif
+if !exists("g:netrw_xstrlen")
+ let g:netrw_xstrlen= 1
+endif
+if !exists("g:NetrwTopLvlMenu")
+ let g:NetrwTopLvlMenu= "Netrw."
+endif
+if !exists("g:netrw_use_errorwindow")
+ let g:netrw_use_errorwindow= 1
+endif
+if !exists("g:netrw_win95ftp")
+ let g:netrw_win95ftp= 1
+endif
+if !exists("g:netrw_winsize")
+ let g:netrw_winsize= ""
+endif
+" ---------------------------------------------------------------------
+" Default values for netrw's script variables: {{{2
+if !exists("g:netrw_fname_escape")
+ let g:netrw_fname_escape= ' ?&;%'
+endif
+if !exists("g:netrw_glob_escape")
+  let g:netrw_glob_escape= '[]*?`{~$'
+endif
+if !exists("g:netrw_tmpfile_escape")
+ let g:netrw_tmpfile_escape= ' &;'
+endif
+let s:netrw_map_escape = "<|\n\r\\\<C-V>\""
+
+" BufEnter event ignored by decho when following variable is true
+"  Has a side effect that doau BufReadPost doesn't work, so
+"  files read by network transfer aren't appropriately highlighted.
+"let g:decho_bufenter = 1	"Decho
+
+" ==============================
+"  Netrw Utility Functions: {{{1
+" ==============================
+
+" ------------------------------------------------------------------------
+" s:NetrwOptionSave: save options and set to "standard" form {{{2
+"  06/08/07 : removed call to NetrwSafeOptions(), either placed
+"             immediately after NetrwOptionSave() calls in NetRead
+"             and NetWrite, or after the s:NetrwEnew() call in
+"             NetrwBrowse.
+"             vt: normally its "w:" or "s:" (a variable type)
+fun! s:NetrwOptionSave(vt)
+"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
+
+"  call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
+  if !exists("{a:vt}netrw_optionsave")
+   let {a:vt}netrw_optionsave= 1
+  else
+"   call Dret("s:NetrwOptionSave : options already saved")
+   return
+  endif
+"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+
+  " Save current settings and current directory
+  let s:yykeep          = @@
+  if exists("&l:acd")
+   let {a:vt}netrw_acdkeep  = &l:acd
+  endif
+  let {a:vt}netrw_aikeep    = &l:ai
+  let {a:vt}netrw_awkeep    = &l:aw
+  let {a:vt}netrw_cikeep    = &l:ci
+  let {a:vt}netrw_cinkeep   = &l:cin
+  let {a:vt}netrw_cinokeep  = &l:cino
+  let {a:vt}netrw_comkeep   = &l:com
+  let {a:vt}netrw_cpokeep   = &l:cpo
+  if g:netrw_keepdir
+   let {a:vt}netrw_dirkeep  = getcwd()
+  endif
+  let {a:vt}netrw_fokeep    = &l:fo           " formatoptions
+  let {a:vt}netrw_gdkeep    = &l:gd           " gdefault
+  let {a:vt}netrw_hidkeep   = &l:hidden
+  let {a:vt}netrw_magickeep = &l:magic
+  let {a:vt}netrw_repkeep   = &l:report
+  let {a:vt}netrw_spellkeep = &l:spell
+  let {a:vt}netrw_twkeep    = &l:tw           " textwidth
+  let {a:vt}netrw_wigkeep   = &l:wig          " wildignore
+  if has("win32") && !has("win95")
+   let {a:vt}netrw_swfkeep  = &l:swf          " swapfile
+  endif
+  if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif
+  silent! let {a:vt}netrw_regslash= @/
+
+"  call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%"))
+endfun
+
+" ------------------------------------------------------------------------
+" s:NetrwOptionRestore: restore options {{{2
+fun! s:NetrwOptionRestore(vt)
+"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%"))
+  if !exists("{a:vt}netrw_optionsave")
+"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"   call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
+   return
+  endif
+  unlet {a:vt}netrw_optionsave
+
+  if exists("&acd")
+   if exists("{a:vt}netrw_acdkeep")
+"    call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+    let curdir = getcwd()
+    let &l:acd = {a:vt}netrw_acdkeep
+    unlet {a:vt}netrw_acdkeep
+    if &l:acd
+"     call Decho("exe keepjumps lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
+     try
+      if !exists("&l:acd") && !&l:acd
+       exe 'keepjumps lcd '.fnameescape(curdir)
+      endif
+     catch /^Vim\%((\a\+)\)\=:E472/
+      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".curdir."> (permissions?)",61)
+     endtry
+    endif
+   endif
+  endif
+  if exists("{a:vt}netrw_aikeep")   |let &l:ai     = {a:vt}netrw_aikeep      |unlet {a:vt}netrw_aikeep   |endif
+  if exists("{a:vt}netrw_awkeep")   |let &l:aw     = {a:vt}netrw_awkeep      |unlet {a:vt}netrw_awkeep   |endif
+  if exists("{a:vt}netrw_cikeep")   |let &l:ci     = {a:vt}netrw_cikeep      |unlet {a:vt}netrw_cikeep   |endif
+  if exists("{a:vt}netrw_cinkeep")  |let &l:cin    = {a:vt}netrw_cinkeep     |unlet {a:vt}netrw_cinkeep  |endif
+  if exists("{a:vt}netrw_cinokeep") |let &l:cino   = {a:vt}netrw_cinokeep    |unlet {a:vt}netrw_cinokeep |endif
+  if exists("{a:vt}netrw_comkeep")  |let &l:com    = {a:vt}netrw_comkeep     |unlet {a:vt}netrw_comkeep  |endif
+  if exists("{a:vt}netrw_cpokeep")  |let &l:cpo    = {a:vt}netrw_cpokeep     |unlet {a:vt}netrw_cpokeep  |endif
+  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
+   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
+   if exists("{a:vt}netrw_dirkeep")  |exe "keepjumps lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep  |endif
+  endif
+  if exists("{a:vt}netrw_fokeep")   |let &l:fo     = {a:vt}netrw_fokeep      |unlet {a:vt}netrw_fokeep   |endif
+  if exists("{a:vt}netrw_gdkeep")   |let &l:gd     = {a:vt}netrw_gdkeep      |unlet {a:vt}netrw_gdkeep   |endif
+  if exists("{a:vt}netrw_hidkeep")  |let &l:hidden = {a:vt}netrw_hidkeep     |unlet {a:vt}netrw_hidkeep  |endif
+  if exists("{a:vt}netrw_magic")    |let &l:magic  = {a:vt}netrw_magic       |unlet {a:vt}netrw_magic    |endif
+  if exists("{a:vt}netrw_repkeep")  |let &l:report = {a:vt}netrw_repkeep     |unlet {a:vt}netrw_repkeep  |endif
+  if exists("{a:vt}netrw_spellkeep")|let &l:spell  = {a:vt}netrw_spellkeep   |unlet {a:vt}netrw_spellkeep|endif
+  if exists("{a:vt}netrw_twkeep")   |let &l:tw     = {a:vt}netrw_twkeep      |unlet {a:vt}netrw_twkeep   |endif
+  if exists("{a:vt}netrw_wigkeep")  |let &l:wig    = {a:vt}netrw_wigkeep     |unlet {a:vt}netrw_wigkeep  |endif
+  if exists("s:yykeep")             |let  @@       = s:yykeep                |unlet s:yykeep             |endif
+  if exists("{a:vt}netrw_swfkeep")
+   if &directory == ""
+    " user hasn't specified a swapfile directory;
+    " netrw will temporarily set the swapfile directory
+    " to the current directory as returned by getcwd().
+    let &l:directory   = getcwd()
+    silent! let &l:swf = {a:vt}netrw_swfkeep
+    setlocal directory=
+    unlet {a:vt}netrw_swfkeep
+   elseif &l:swf != {a:vt}netrw_swfkeep
+    " following line causes a Press ENTER in windows -- can't seem to work around it!!!
+    silent! let &l:swf= {a:vt}netrw_swfkeep
+    unlet {a:vt}netrw_swfkeep
+   endif
+  endif
+  if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
+  if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
+
+"  call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"  call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%"))
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwSafeOptions: sets options to help netrw do its job {{{2
+fun! s:NetrwSafeOptions()
+"  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">")
+"  call Decho("window's ft=".&ft)
+  setlocal cino=
+  setlocal com=
+  setlocal cpo-=aA
+  if exists("&acd") | setlocal noacd | endif
+  setlocal nocin noai noci magic nospell nohid wig= noaw
+  setlocal fo=nroql2
+  setlocal tw=0
+  setlocal report=10000
+  if g:netrw_use_noswf && has("win32") && !has("win95")
+   setlocal noswf
+  endif
+"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Dret("s:NetrwSafeOptions")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetrwClean: remove netrw {{{2
+" supports :NetrwClean  -- remove netrw from first directory on runtimepath
+"          :NetrwClean! -- remove netrw from all directories on runtimepath
+fun! netrw#NetrwClean(sys)
+"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
+
+  if a:sys
+   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
+  else
+   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
+  endif
+"  call Decho("choice=".choice)
+  let diddel= 0
+  let diddir= ""
+
+  if choice == 1
+   for dir in split(&rtp,',')
+    if filereadable(dir."/plugin/netrwPlugin.vim")
+"     call Decho("removing netrw-related files from ".dir)
+     if s:NetrwDelete(dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
+     if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
+     if s:NetrwDelete(dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
+     if s:NetrwDelete(dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
+     if s:NetrwDelete(dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
+     if s:NetrwDelete(dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
+     let diddir= dir
+     let diddel= diddel + 1
+     if !a:sys|break|endif
+    endif
+   endfor
+  endif
+
+   echohl WarningMsg
+  if diddel == 0
+   echomsg "netrw is either not installed or not removable"
+  elseif diddel == 1
+   echomsg "removed one copy of netrw from <".diddir.">"
+  else
+   echomsg "removed ".diddel." copies of netrw"
+  endif
+   echohl None
+
+"  call Dret("netrw#NetrwClean")
+endfun
+
+" ------------------------------------------------------------------------
+"  Netrw Transfer Functions: {{{1
+" ===============================
+
+" ------------------------------------------------------------------------
+" netrw#NetRead: responsible for reading a file over the net {{{2
+"   mode: =0 read remote file and insert before current line
+"         =1 read remote file and insert after current line
+"         =2 replace with remote file
+"         =3 obtain file, but leave in temporary format
+fun! netrw#NetRead(mode,...)
+"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
+
+  " save options {{{3
+  call s:NetrwOptionSave("w:")
+  call s:NetrwSafeOptions()
+
+  " interpret mode into a readcmd {{{3
+  if     a:mode == 0 " read remote file before current line
+   let readcmd = "0r"
+  elseif a:mode == 1 " read file after current line
+   let readcmd = "r"
+  elseif a:mode == 2 " replace with remote file
+   let readcmd = "%r"
+  elseif a:mode == 3 " skip read of file (leave as temporary)
+   let readcmd = "t"
+  else
+   exe a:mode
+   let readcmd = "r"
+  endif
+  let ichoice = (a:0 == 0)? 0 : 1
+"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
+
+  " Get Temporary Filename {{{3
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetRead : unable to get a tempfile!")
+   return
+  endif
+
+  while ichoice <= a:0
+
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
+
+   else
+    exe "let choice= a:" . ichoice
+"    call Decho("no lastfile: choice<" . choice . ">")
+
+    if match(choice,"?") == 0
+     " give help
+     echomsg 'NetRead Usage:'
+     echomsg ':Nread machine:path                         uses rcp'
+     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
+     echomsg ':Nread "machine id password path"           uses ftp'
+     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
+     echomsg ':Nread fetch://machine/path                 uses fetch'
+     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+     echomsg ':Nread http://[user@]machine/path           uses http  wget'
+     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
+     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
+     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
+     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+     sleep 4
+     break
+
+    elseif match(choice,'^"') != -1
+     " Reconstruct Choice if choice starts with '"'
+"     call Decho("reconstructing choice")
+     if match(choice,'"$') != -1
+      " case "..."
+      let choice=strpart(choice,1,strlen(choice)-2)
+     else
+       "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
+
+      while match(choice,'"$') == -1
+       let wholechoice = wholechoice . " " . choice
+       let ichoice     = ichoice + 1
+       if ichoice > a:0
+       	if !exists("g:netrw_quiet")
+	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
+	endif
+"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
+    endif
+   endif
+
+"   call Decho("choice<" . choice . ">")
+   let ichoice= ichoice + 1
+
+   " Determine method of read (ftp, rcp, etc) {{{3
+   call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetRead : unsupported method")
+    return
+   endif
+   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
+
+   " Check if NetrwBrowse() should be handling this request
+"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
+   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
+"    call Decho("yes, choice matches '^.*[\/]$'")
+    keepjumps call s:NetrwBrowse(0,choice)
+"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
+    return
+   endif
+
+   " ============
+   " Perform Protocol-Based Read {{{3
+   " ===========================
+   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+    echo "(netrw) Processing your read request..."
+   endif
+
+   ".........................................
+   " rcp:  NetRead Method #1 {{{3
+   if  b:netrw_method == 1 " read with rcp
+"    call Decho("read via rcp (method #1)")
+   " ER: nothing done with g:netrw_uid yet?
+   " ER: on Win2K" rcp machine[.user]:file tmpfile
+   " ER: if machine contains '.' adding .user is required (use $USERNAME)
+   " ER: the tmpfile is full path: rcp sees C:\... as host C
+   if s:netrw_has_nt_rcp == 1
+    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+    else
+     " Any way needed it machine contains a '.'
+     let uid_machine = g:netrw_machine .'.'. $USERNAME
+    endif
+   else
+    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+    else
+     let uid_machine = g:netrw_machine
+    endif
+   endif
+"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+   let b:netrw_lastfile = choice
+
+   ".........................................
+   " ftp + <.netrc>:  NetRead Method #2 {{{3
+   elseif b:netrw_method  == 2		" read with ftp + <.netrc>
+"     call Decho("read via ftp+.netrc (method #2)")
+     let netrw_fname= b:netrw_fname
+     call s:SaveBufVars()|new|call s:RestoreBufVars()
+     let filtbuf= bufnr("%")
+     setlocal ff=unix
+     put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline(line("$")))
+     if exists("g:netrw_ftpextracmd")
+      put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline(line("$")))
+     endif
+     call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
+"     call Decho("filter input: ".getline(line("$")))
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1)
+     else
+"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep = &debug
+      setlocal debug=msg
+      call netrw#ErrorMsg(s:ERROR,getline(1),4)
+      let &debug    = debugkeep
+     endif
+     call s:SaveBufVars()
+     bd!
+     if bufname("%") == "" && getline("$") == "" && line('$') == 1
+      " needed when one sources a file in a nolbl setting window via ftp
+      q!
+     endif
+     call s:RestoreBufVars()
+     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+     let b:netrw_lastfile = choice
+
+   ".........................................
+   " ftp + machine,id,passwd,filename:  NetRead Method #3 {{{3
+   elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
+    " Construct execution string (four lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    call s:SaveBufVars()|new|call s:RestoreBufVars()
+    let filtbuf= bufnr("%")
+    setlocal ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('.'))
+    else
+     put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('.'))
+    endif
+
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+"     call Decho("filter input: ".getline('.'))
+     put ='\"'.s:netrw_passwd.'\"'
+"     call Decho("filter input: ".getline('.'))
+    else
+     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"     call Decho("filter input: ".getline('.'))
+    endif
+
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('.'))
+    endif
+    if exists("g:netrw_ftpextracmd")
+     put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('.'))
+    endif
+    put ='get \"'.netrw_fname.'\" '.tmpfile
+"    call Decho("filter input: ".getline('.'))
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+"     call Decho("error<".getline(1).">")
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),5)
+     endif
+    endif
+    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " scp: NetRead Method #4 {{{3
+   elseif     b:netrw_method  == 4	" read with scp
+"    call Decho("read via scp (method #4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
+    else
+     let useport= ""
+    endif
+"    call Decho("exe s:netrw_silentxfer.!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " http: NetRead Method #5 (wget) {{{3
+   elseif     b:netrw_method  == 5
+"    call Decho("read via http (method #5)")
+    if g:netrw_http_cmd == ""
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
+     endif
+"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
+     return
+    endif
+
+    if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd")
+     " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch)
+"     call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
+     if exists("g:netrw_http_xcmd")
+"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1))
+      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
+     else
+"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1))
+      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
+     endif
+     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+
+    else
+     " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
+"     call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
+     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
+     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
+"     call Decho("netrw_html<".netrw_html.">")
+"     call Decho("netrw_tag <".netrw_tag.">")
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
+     exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
+     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
+     exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
+    endif
+    let b:netrw_lastfile = choice
+    setlocal ro
+
+   ".........................................
+   " cadaver: NetRead Method #6 {{{3
+   elseif     b:netrw_method  == 6
+"    call Decho("read via cadaver (method #6)")
+
+    " Construct execution string (four lines) which will be passed through filter
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    new
+    setlocal ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     put ='open '.g:netrw_machine
+    endif
+    put ='user '.g:netrw_uid.' '.s:netrw_passwd
+    put ='get '.netrw_fname.' '.tmpfile
+    put ='quit'
+
+    " perform cadaver operation:
+    norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+    bd!
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " rsync: NetRead Method #7 {{{3
+   elseif     b:netrw_method  == 7
+"    call Decho("read via rsync (method #7)")
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    let result		 = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " fetch: NetRead Method #8 {{{3
+   "    fetch://[user@]host[:http]/path
+   elseif     b:netrw_method  == 8
+"    call Decho("read via fetch (method #8)")
+    if g:netrw_fetch_cmd == ""
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
+     endif
+"     call Dret("NetRead")
+    endif
+    if exists("g:netrw_option") && g:netrw_option == ":http"
+     let netrw_option= "http"
+    else
+     let netrw_option= "ftp"
+    endif
+"    call Decho("read via fetch for ".netrw_option)
+
+    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
+     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
+    else
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
+     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
+    endif
+
+    let result		= s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+    setlocal ro
+
+   ".........................................
+   " sftp: NetRead Method #9 {{{3
+   elseif     b:netrw_method  == 9
+"    call Decho("read via sftp (method #9)")
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
+    exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
+    let result		= s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " Complain {{{3
+   else
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
+   endif
+  endwhile
+
+  " cleanup {{{3
+  if exists("b:netrw_method")
+"   call Decho("cleanup b:netrw_method and b:netrw_fname")
+   unlet b:netrw_method
+   unlet b:netrw_fname
+  endif
+  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't'
+"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
+   call s:NetrwDelete(fnameescape(tmpfile))
+  endif
+  call s:NetrwOptionRestore("w:")
+
+"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
+endfun
+
+" ------------------------------------------------------------------------
+" netrw#NetWrite: responsible for writing a file over the net {{{2
+fun! netrw#NetWrite(...) range
+"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
+
+  " option handling
+  let mod= 0
+  call s:NetrwOptionSave("w:")
+  call s:NetrwSafeOptions()
+
+  " Get Temporary Filename {{{3
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetWrite : unable to get a tempfile!")
+   return
+  endif
+
+  if a:0 == 0
+   let ichoice = 0
+  else
+   let ichoice = 1
+  endif
+
+  let curbufname= expand("%")
+"  call Decho("curbufname<".curbufname.">")
+  if &binary
+   " For binary writes, always write entire file.
+   " (line numbers don't really make sense for that).
+   " Also supports the writing of tar and zip files.
+"   call Decho("(write entire file) silent exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+   silent exe "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+  elseif g:netrw_cygwin
+   " write (selected portion of) file to temporary
+   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
+"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
+   silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
+  else
+   " write (selected portion of) file to temporary
+"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+   silent exe a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+  endif
+
+  if curbufname == ""
+   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
+   " on the temporary file's name.  Deletion of the temporary file during
+   " cleanup then causes an error message.
+   0file!
+  endif
+
+  " While choice loop: {{{3
+  while ichoice <= a:0
+
+   " Process arguments: {{{4
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
+   else
+    exe "let choice= a:" . ichoice
+
+    " Reconstruct Choice if choice starts with '"'
+    if match(choice,"?") == 0
+     echomsg 'NetWrite Usage:"'
+     echomsg ':Nwrite machine:path                        uses rcp'
+     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
+     echomsg ':Nwrite "machine id password path"          uses ftp'
+     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
+     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
+     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
+     echomsg ':Nwrite rcp://machine/path                  uses rcp'
+     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
+     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
+     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
+     sleep 4
+     break
+
+    elseif match(choice,"^\"") != -1
+     if match(choice,"\"$") != -1
+       " case "..."
+      let choice=strpart(choice,1,strlen(choice)-2)
+     else
+      "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
+
+      while match(choice,"\"$") == -1
+       let wholechoice= wholechoice . " " . choice
+       let ichoice    = ichoice + 1
+       if choice > a:0
+       	if !exists("g:netrw_quiet")
+	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
+	endif
+"        call Dret("netrw#NetWrite")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
+    endif
+   endif
+   let ichoice= ichoice + 1
+"   call Decho("choice<" . choice . "> ichoice=".ichoice)
+
+   " Determine method of write (ftp, rcp, etc) {{{4
+   call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetWrite : unsupported method")
+    return
+   endif
+
+   " =============
+   " Perform Protocol-Based Write {{{4
+   " ============================
+   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+    echo "(netrw) Processing your write request..."
+"    call Decho("(netrw) Processing your write request...")
+   endif
+
+   ".........................................
+   " rcp: NetWrite Method #1 {{{4
+   if  b:netrw_method == 1
+"    call Decho("write via rcp (method #1)")
+    if s:netrw_has_nt_rcp == 1
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+     else
+      let uid_machine = g:netrw_machine .'.'. $USERNAME
+     endif
+    else
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+     else
+      let uid_machine = g:netrw_machine
+     endif
+    endif
+"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " ftp + <.netrc>: NetWrite Method #2 {{{4
+   elseif b:netrw_method == 2
+"    call Decho("write via ftp+.netrc (method #2)")
+    let netrw_fname= b:netrw_fname
+    new
+"    call Decho("filter input window#".winnr())
+    setlocal ff=unix
+    put =g:netrw_ftpmode
+"    call Decho("filter input: ".getline('$'))
+    if exists("g:netrw_ftpextracmd")
+     put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline("$"))
+    endif
+    call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
+"    call Decho("filter input: ".getline("$"))
+    if exists("g:netrw_port") && g:netrw_port != ""
+"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+    else
+"     call Decho("filter input window#".winnr())
+"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+    endif
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),14)
+     endif
+     let mod=1
+    endif
+    bd!
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " ftp + machine, id, passwd, filename: NetWrite Method #3 {{{4
+   elseif b:netrw_method == 3
+    " Construct execution string (four lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
+    let netrw_fname= b:netrw_fname
+    new
+    setlocal ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('.'))
+    else
+     put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('.'))
+    endif
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+"     call Decho("filter input: ".getline('.'))
+     put ='\"'.s:netrw_passwd.'\"'
+"     call Decho("filter input: ".getline('.'))
+    else
+     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"     call Decho("filter input: ".getline('.'))
+    endif
+    put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
+"    call Decho("filter input: ".getline('.'))
+    " save choice/id/password for future use
+    let b:netrw_lastfile = choice
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     if  !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),15)
+     endif
+     let mod=1
+    endif
+    bd!
+
+   ".........................................
+   " scp: NetWrite Method #4 {{{4
+   elseif     b:netrw_method == 4
+"    call Decho("write via scp (method #4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
+    else
+     let useport= ""
+    endif
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " http: NetWrite Method #5 {{{4
+   elseif     b:netrw_method == 5
+"    call Decho("write via http (method #5)")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
+    endif
+
+   ".........................................
+   " dav: NetWrite Method #6 (cadaver) {{{4
+   elseif     b:netrw_method == 6
+"    call Decho("write via cadaver (method #6)")
+
+    " Construct execution string (four lines) which will be passed through filter
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    new
+    setlocal ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     put ='open '.g:netrw_machine
+    endif
+    if exists("g:netrw_uid") && exists("s:netrw_passwd")
+     put ='user '.g:netrw_uid.' '.s:netrw_passwd
+    endif
+    put ='put '.tmpfile.' '.netrw_fname
+
+    " perform cadaver operation:
+    norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+    bd!
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " rsync: NetWrite Method #7 {{{4
+   elseif     b:netrw_method == 7
+"    call Decho("write via rsync (method #7)")
+"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " sftp: NetWrite Method #9 {{{4
+   elseif     b:netrw_method == 9
+"    call Decho("read via sftp (method #9)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+    else
+     let uid_machine = g:netrw_machine
+    endif
+    new
+    setlocal ff=unix
+    put ='put \"'.escape(tmpfile,'\').'\" '.netrw_fname
+"    call Decho("filter input: ".getline('.'))
+    norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
+    exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)
+    bd!
+    let b:netrw_lastfile= choice
+
+   ".........................................
+   " Complain {{{4
+   else
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
+   endif
+  endwhile
+
+  " Cleanup: {{{3
+"  call Decho("cleanup")
+  if s:FileReadable(tmpfile)
+"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
+   call s:NetrwDelete(tmpfile)
+  endif
+  call s:NetrwOptionRestore("w:")
+
+  if a:firstline == 1 && a:lastline == line("$")
+   " restore modifiability; usually equivalent to set nomod
+   let &mod= mod
+  endif
+
+"  call Dret("netrw#NetWrite")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetSource: source a remotely hosted vim script {{{2
+" uses NetRead to get a copy of the file into a temporarily file,
+"              then sources that file,
+"              then removes that file.
+fun! netrw#NetSource(...)
+"  call Dfunc("netrw#NetSource() a:0=".a:0)
+  if a:0 > 0 && a:1 == '?'
+   " give help
+   echomsg 'NetSource Usage:'
+   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
+   echomsg ':Nsource fetch://machine/path                 uses fetch'
+   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+   echomsg ':Nsource http://[user@]machine/path           uses http  wget'
+   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
+   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
+   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
+   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
+   sleep 4
+  else
+   let i= 1
+   while i <= a:0
+    call netrw#NetRead(3,a:{i})
+"    call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">")
+    if s:FileReadable(s:netrw_tmpfile)
+"     call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile))
+     exe "so ".fnameescape(s:netrw_tmpfile)
+"     call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")")
+     call delete(s:netrw_tmpfile)
+     unlet s:netrw_tmpfile
+    else
+     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
+    endif
+    let i= i + 1
+   endwhile
+  endif
+"  call Dret("netrw#NetSource")
+endfun
+
+" ===========================================
+" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
+"    readcmd == %r : replace buffer with newly read file
+"            == 0r : read file at top of buffer
+"            == r  : read file after current line
+"            == t  : leave file in temporary form (ie. don't read into buffer)
+fun! s:NetrwGetFile(readcmd, tfile, method)
+"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+
+  " readcmd=='t': simply do nothing
+  if a:readcmd == 't'
+"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
+   return
+  endif
+
+  " get name of remote filename (ie. url and all)
+  let rfile= bufname("%")
+"  call Decho("rfile<".rfile.">")
+
+  if exists("*NetReadFixup")
+   " for the use of NetReadFixup (not otherwise used internally)
+   let line2= line("$")
+  endif
+
+  if a:readcmd[0] == '%'
+  " get file into buffer
+"   call Decho("get file into buffer")
+
+   " rename the current buffer to the temp file (ie. tfile)
+   if g:netrw_cygwin
+    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
+   else
+    let tfile= a:tfile
+   endif
+"   call Decho("exe silent! keepalt file ".fnameescape(tfile))
+   exe "silent! keepalt file ".fnameescape(tfile)
+
+   " edit temporary file (ie. read the temporary file in)
+   if     rfile =~ '\.zip$'
+"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
+    call zip#Browse(tfile)
+   elseif rfile =~ '\.tar$'
+"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.gz'
+"    call Decho("handling remote gzip-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.bz2'
+"    call Decho("handling remote bz2-compressed tar file")
+    call tar#Browse(tfile)
+   else
+"    call Decho("edit temporary file")
+    e!
+   endif
+
+   " rename buffer back to remote filename
+"   call Decho("exe silent! keepalt file ".fnameescape(rfile))
+   exe "silent! keepalt file ".fnameescape(rfile)
+   if a:method == 5
+    set ft=html
+   else
+    filetype detect
+   endif
+"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
+   let line1 = 1
+   let line2 = line("$")
+
+  elseif s:FileReadable(a:tfile)
+   " read file after current line
+"   call Decho("read file<".a:tfile."> after current line")
+   let curline = line(".")
+   let lastline= line("$")
+"   call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile).">  line#".curline)
+   exe a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
+   let line1= curline + 1
+   let line2= line("$") - lastline + 1
+
+  else
+   " not readable
+"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"   call Decho("tfile<".a:tfile."> not readable")
+   call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
+"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
+   return
+  endif
+
+  " User-provided (ie. optional) fix-it-up command
+  if exists("*NetReadFixup")
+"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+   call NetReadFixup(a:method, line1, line2)
+"  else " Decho
+"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
+  endif
+
+  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
+   " update the Buffers menu
+   call s:UpdateBuffersMenu()
+  endif
+
+"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
+
+ " make sure file is being displayed
+"  redraw!
+
+"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"  call Dret("NetrwGetFile")
+endfun
+
+" ------------------------------------------------------------------------
+" s:NetrwMethod:  determine method of transfer {{{2
+" Input:
+"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
+" Output:
+"  b:netrw_method= 1: rcp                                             
+"                  2: ftp + <.netrc>                                  
+"	           3: ftp + machine, id, password, and [path]filename 
+"	           4: scp                                             
+"	           5: http (wget)                                     
+"	           6: cadaver                                         
+"	           7: rsync                                           
+"	           8: fetch                                           
+"	           9: sftp                                            
+"  g:netrw_machine= hostname
+"  b:netrw_fname  = filename
+"  g:netrw_port   = optional port number (for ftp)
+"  g:netrw_choice = copy of input url (choice)
+fun! s:NetrwMethod(choice)
+"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
+
+   " record current g:netrw_machine, if any
+   " curmachine used if protocol == ftp and no .netrc
+   if exists("g:netrw_machine")
+    let curmachine= g:netrw_machine
+"    call Decho("curmachine<".curmachine.">")
+   else
+    let curmachine= "N O T A HOST"
+   endif
+
+  " initialization
+  let b:netrw_method  = 0
+  let g:netrw_machine = ""
+  let b:netrw_fname   = ""
+  let g:netrw_port    = ""
+  let g:netrw_choice  = a:choice
+
+  " Patterns:
+  " mipf     : a:machine a:id password filename	     Use ftp
+  " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+  " rcpurm   : rcp://[user@]host/filename	     Use rcp
+  " rcphf    : [user@]host:filename		     Use rcp
+  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
+  " httpurm  : http://[user@]host/filename	     Use wget
+  " davurm   : dav[s]://host[:port]/path             Use cadaver
+  " rsyncurm : rsync://host[:port]/path              Use rsync
+  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
+  " sftpurm  : sftp://[user@]host/filename  Use scp
+  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
+  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
+  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
+  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
+  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
+  let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
+  let davurm   = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
+  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
+  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
+  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
+
+"  call Decho("determine method:")
+  " Determine Method
+  " rcp://user@hostname/...path-to-file
+  if match(a:choice,rcpurm) == 0
+"   call Decho("rcp://...")
+   let b:netrw_method  = 1
+   let userid          = substitute(a:choice,rcpurm,'\1',"")
+   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
+   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
+
+  " scp://user@hostname/...path-to-file
+  elseif match(a:choice,scpurm) == 0
+"   call Decho("scp://...")
+   let b:netrw_method  = 4
+   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
+   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
+   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
+
+  " http://user@hostname/...path-to-file
+  elseif match(a:choice,httpurm) == 0
+"   call Decho("http://...")
+   let b:netrw_method = 5
+   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
+
+  " dav://hostname[:port]/..path-to-file..
+  elseif match(a:choice,davurm) == 0
+"   call Decho("dav://...")
+   let b:netrw_method= 6
+   if a:choice =~ '^s'
+    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
+   else
+    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
+   endif
+   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
+
+  " rsync://user@hostname/...path-to-file
+  elseif match(a:choice,rsyncurm) == 0
+"   call Decho("rsync://...")
+   let b:netrw_method = 7
+   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
+
+  " ftp://[user@]hostname[[:#]port]/...path-to-file
+  elseif match(a:choice,ftpurm) == 0
+"   call Decho("ftp://...")
+   let userid	      = substitute(a:choice,ftpurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
+   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
+"   call Decho("g:netrw_machine<".g:netrw_machine.">")
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
+   if exists("s:netrw_passwd") && curmachine != g:netrw_machine
+    " if there's a change in hostname, require password re-entry
+    unlet s:netrw_passwd
+   endif
+   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+    let b:netrw_method = 3
+   else
+    if s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
+     let b:netrw_method= 2
+    else
+     if !exists("g:netrw_uid") || g:netrw_uid == ""
+      call NetUserPass()
+     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
+      call NetUserPass(g:netrw_uid)
+    " else just use current g:netrw_uid and s:netrw_passwd
+     endif
+     let b:netrw_method= 3
+    endif
+   endif
+
+  elseif match(a:choice,fetchurm) == 0
+"   call Decho("fetch://...")
+   let b:netrw_method = 8
+   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
+   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
+
+  " Issue an ftp : "machine id password [path/]filename"
+  elseif match(a:choice,mipf) == 0
+"   call Decho("(ftp) host id pass file")
+   let b:netrw_method  = 3
+   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
+   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
+   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
+   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
+
+  " Issue an ftp: "hostname [path/]filename"
+  elseif match(a:choice,mf) == 0
+"   call Decho("(ftp) host file")
+   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+    let b:netrw_method  = 3
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+
+   elseif s:FileReadable(expand("$HOME/.netrc"))
+    let b:netrw_method  = 2
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+   endif
+
+  " sftp://user@hostname/...path-to-file
+  elseif match(a:choice,sftpurm) == 0
+"   call Decho("sftp://...")
+   let b:netrw_method = 9
+   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
+
+  " Issue an rcp: hostname:filename"  (this one should be last)
+  elseif match(a:choice,rcphf) == 0
+"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
+   let b:netrw_method  = 1
+   let userid          = substitute(a:choice,rcphf,'\2',"")
+   let g:netrw_machine = substitute(a:choice,rcphf,'\3',"")
+   let b:netrw_fname   = substitute(a:choice,rcphf,'\4',"")
+"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
+"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
+"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
+"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
+
+  else
+   if !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
+   endif
+   let b:netrw_method  = -1
+  endif
+
+  " remove any leading [:#] from port number
+  if g:netrw_port != ""
+    let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
+  endif
+
+"  call Decho("a:choice       <".a:choice.">")
+"  call Decho("b:netrw_method <".b:netrw_method.">")
+"  call Decho("g:netrw_machine<".g:netrw_machine.">")
+"  call Decho("g:netrw_port   <".g:netrw_port.">")
+"  if exists("g:netrw_uid")		"Decho
+"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
+"  endif					"Decho
+"  if exists("s:netrw_passwd")		"Decho
+"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
+"  endif					"Decho
+"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
+"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method)
+endfun
+
+" ------------------------------------------------------------------------
+" NetReadFixup: this sort of function is typically written by the user {{{2
+"               to handle extra junk that their system's ftp dumps
+"               into the transfer.  This function is provided as an
+"               example and as a fix for a Windows 95 problem: in my
+"               experience, win95's ftp always dumped four blank lines
+"               at the end of the transfer.
+if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
+ fun! NetReadFixup(method, line1, line2)
+"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+
+   " sanity checks -- attempt to convert inputs to integers
+   let method = a:method + 0
+   let line1  = a:line1 + 0
+   let line2  = a:line2 + 0
+   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
+"    call Dret("NetReadFixup")
+    return
+   endif
+
+   if method == 3   " ftp (no <.netrc>)
+    let fourblanklines= line2 - 3
+    if fourblanklines >= line1
+     exe "silent ".fourblanklines.",".line2."g/^\s*$/d"
+    endif
+   endif
+
+"   call Dret("NetReadFixup")
+ endfun
+endif
+
+" ---------------------------------------------------------------------
+" NetUserPass: set username and password for subsequent ftp transfer {{{2
+"   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 s:netrw_passwd= inputsecret("Enter Password: ")
+ else " from command line
+"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
+  let s:netrw_passwd=a:2
+ endif
+
+"  call Dret("NetUserPass")
+endfun
+
+" ===========================================
+"  Shared Browsing Support:    {{{1
+" ===========================================
+
+" ---------------------------------------------------------------------
+" s:BrowserMaps: {{{2
+fun! s:BrowserMaps(islocal)
+"  call Dfunc("s:BrowserMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
+  if a:islocal
+"   call Decho("make local maps")
+   nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(1)<cr>
+   nnoremap <buffer> <silent> c		:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("")<cr>
+   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(1)<cr>
+   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(3)<cr>
+   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(1)<cr>
+   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
+   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookmarkDir(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
+   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
+   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookmarkDir(4,expand("%"))<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookmarkDir(5,expand("%"))<cr>
+   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
+   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
+   if !hasmapto('<Plug>NetrwHideEdit')
+    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
+   endif
+   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(1)<cr>
+   if !hasmapto('<Plug>NetrwRefresh')
+    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+   endif
+   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   if s:didstarstar || !mapcheck("<s-down>","n")
+    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+   endif
+   if s:didstarstar || !mapcheck("<s-up>","n")
+    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+   endif
+   let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
+   if g:netrw_mousemaps == 1
+    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
+    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
+    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   endif
+   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
+   nnoremap <buffer> <F1>		:he netrw-quickhelp<cr>
+
+  else " remote
+"   call Decho("make remote maps")
+   call s:RemotePathAnalysis(b:netrw_curdir)
+   nnoremap <buffer> <silent> <cr>	:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+   nnoremap <buffer> <silent> <c-l>	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(0)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookmarkDir(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookmarkDir(1,b:netrw_cur)<cr>
+   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
+   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(0)<cr>
+   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(0)<cr>
+   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
+   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(0)<cr>
+   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookmarkDir(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookmarkDir(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
+   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
+   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookmarkDir(4,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookmarkDir(5,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
+   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(0)<cr>
+   if !hasmapto('<Plug>NetrwHideEdit')
+    nmap <buffer> <c-h> <Plug>NetrwHideEdit
+   endif
+   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(0)<cr>
+   if !hasmapto('<Plug>NetrwRefresh')
+    nmap <buffer> <c-l> <Plug>NetrwRefresh
+   endif
+
+   let mapsafepath     = escape(s:path, s:netrw_map_escape)
+   let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape)
+
+   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   if g:netrw_mousemaps == 1
+    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
+    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
+    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   endif
+   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> d	:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R	:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R	:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   nnoremap <buffer> <F1>			:he netrw-quickhelp<cr>
+  endif
+  call s:SetRexDir(a:islocal,b:netrw_curdir)
+"  call Dret("s:BrowserMaps")
+endfun
+
+" ---------------------------------------------------------------------
+" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
+fun! s:ExplorePatHls(pattern)
+"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
+  let repat= substitute(a:pattern,'^**/\{1,2}','','')
+"  call Decho("repat<".repat.">")
+  let repat= escape(repat,'][.\')
+"  call Decho("repat<".repat.">")
+  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
+"  call Dret("s:ExplorePatHls repat<".repat.">")
+  return repat
+endfun
+
+" ---------------------------------------------------------------------
+"  s:NetrwBookmarkDir: {{{2
+"    0: (user: <mb>)   bookmark current directory
+"    1: (user: <gb>)   change to the bookmarked directory
+"    2: (user: <qb>)   list bookmarks
+"    3: (browsing)     record current directory history
+"    4: (user: <u>)    go up   (previous) bookmark
+"    5: (user: <U>)    go down (next)     bookmark
+"    6: (user: <mB>)   delete bookmark
+fun! s:NetrwBookmarkDir(chg,curdir)
+"  call Dfunc("NetrwBookmarkDir(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." bookmax=".g:NETRW_BOOKMARKMAX." histmax=".g:netrw_dirhistmax)
+
+  if a:chg == 0
+   " bookmark the current directory
+"   call Decho("(user: <b>) bookmark the current directory")
+   if v:count > 0
+    " handle bookmark# specified via the count
+    let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
+    if !exists("g:NETRW_BOOKMARKMAX")
+     let g:NETRW_BOOKMARKMAX= v:count
+    elseif v:count > g:NETRW_BOOKMARKMAX
+     let g:NETRW_BOOKMARKMAX= v:count
+    endif
+   else
+    " handle no count specified
+    let g:NETRW_BOOKMARKMAX                       = g:NETRW_BOOKMARKMAX + 1
+    let g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX} = a:curdir
+   endif
+   echo "bookmarked the current directory"
+
+  elseif a:chg == 1
+   " change to the bookmarked directory
+"   call Decho("(user: <B>) change to the bookmarked directory")
+   if exists("g:NETRW_BOOKMARKDIR_{v:count}")
+    exe "e ".fnameescape(g:NETRW_BOOKMARKDIR_{v:count})
+   else
+    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
+   endif
+
+  elseif a:chg == 2
+"   redraw!
+   let didwork= 0
+   " list user's bookmarks
+"   call Decho("(user: <q>) list user's bookmarks")
+   if exists("g:NETRW_BOOKMARKMAX")
+"    call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
+    let cnt= 0
+    while cnt <= g:NETRW_BOOKMARKMAX
+     if exists("g:NETRW_BOOKMARKDIR_{cnt}")
+"      call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
+      echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
+      let didwork= 1
+     endif
+     let cnt= cnt + 1
+    endwhile
+   endif
+
+   " list directory history
+   let cnt     = g:NETRW_DIRHIST_CNT
+   let first   = 1
+   let histcnt = 0
+   while ( first || cnt != g:NETRW_DIRHIST_CNT )
+"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:NETRW_DIRHIST_CNT)
+    let histcnt= histcnt + 1
+    if exists("g:NETRW_DIRHIST_{cnt}")
+"     call Decho("Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt})
+     echo "Netrw  History#".histcnt.": ".g:NETRW_DIRHIST_{cnt}
+     let didwork= 1
+    endif
+    let first = 0
+    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+    if cnt < 0
+     let cnt= cnt + g:netrw_dirhistmax
+    endif
+   endwhile
+   if didwork
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   endif
+
+  elseif a:chg == 3
+   " saves most recently visited directories (when they differ)
+"   call Decho("(browsing) record curdir history")
+   if !exists("g:NETRW_DIRHIST_0") || g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT} != a:curdir
+    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
+"    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= substitute(a:curdir,'[/\\]$','','e')
+    let g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}= a:curdir
+"    call Decho("save dirhist#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+   endif
+
+  elseif a:chg == 4
+   " u: change to the previous directory stored on the history list
+"   call Decho("(user: <u>) chg to prev dir from history")
+   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
+   if g:NETRW_DIRHIST_CNT < 0
+    let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
+   endif
+   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
+"    call Decho("changedir u#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+     setlocal ma noro
+"     call Decho("setlocal ma noro")
+     %d
+     setlocal nomod
+"     call Decho("setlocal nomod")
+    endif
+"    "    call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
+    exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
+   else
+    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
+    echo "Sorry, no predecessor directory exists yet"
+   endif
+
+  elseif a:chg == 5
+   " U: change to the subsequent directory stored on the history list
+"   call Decho("(user: <U>) chg to next dir from history")
+   let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT + 1 ) % g:netrw_dirhistmax
+   if exists("g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}")
+"    call Decho("changedir U#".g:NETRW_DIRHIST_CNT."<".g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}.">")
+    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+     setlocal ma noro
+"     call Decho("setlocal ma noro")
+     %d
+"     call Decho("removed all lines from buffer (%d)")
+     setlocal nomod
+"     call Decho("setlocal nomod")
+    endif
+"    call Decho("exe e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT}))
+    exe "e! ".fnameescape(g:NETRW_DIRHIST_{g:NETRW_DIRHIST_CNT})
+   else
+    let g:NETRW_DIRHIST_CNT= ( g:NETRW_DIRHIST_CNT - 1 ) % g:netrw_dirhistmax
+    if g:NETRW_DIRHIST_CNT < 0
+     let g:NETRW_DIRHIST_CNT= g:NETRW_DIRHIST_CNT + g:netrw_dirhistmax
+    endif
+    echo "Sorry, no successor directory exists yet"
+   endif
+
+  elseif a:chg == 6
+   if v:count > 0 && v:count == g:NETRW_BOOKMARKMAX
+    " delete the v:count'th bookmark
+"    call Decho("delete bookmark#".v:count."<".g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}.">")
+    unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
+    let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
+
+   elseif v:count > 0
+"    call Decho("delete by shifting bookmark#".v:count."<".g:NETRW_BOOKMARKDIR_{v:count}.">")
+    let cnt= v:count
+    while cnt < g:NETRW_BOOKMARKMAX
+     let g:NETRW_BOOKMARKDIR_{cnt} = g:NETRW_BOOKMARKDIR_{(cnt+1)}
+     let cnt                       = cnt + 1
+    endwhile
+    unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
+    let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
+
+   elseif exists("b:netrw_curdir")
+    " look for current directory amongst the bookmarks and remove that bookmark
+"    call Decho("search for bookmark<".b:netrw_curdir.">")
+    let cnt= 1
+    while cnt <= g:NETRW_BOOKMARKMAX
+"     call Decho("checking: g:NETRW_BOOKMARKDIR_".cnt."<".g:NETRW_BOOKMARKDIR_{cnt}.">")
+     if g:NETRW_BOOKMARKDIR_{cnt} == b:netrw_curdir
+      if cnt < g:NETRW_BOOKMARKMAX
+"       call Decho("delete bookmark#".cnt."<".b:netrw_curdir.">")
+       while cnt < g:NETRW_BOOKMARMAX
+        let g:NETRW_BOOKMARKDIR_{cnt} = g:NETRW_BOOKMARKDIR_{(cnt+1)}
+        let cnt                       = cnt + 1
+       endwhile
+      endif
+      unlet g:NETRW_BOOKMARKDIR_{g:NETRW_BOOKMARKMAX}
+      let g:NETRW_BOOKMARKMAX= g:NETRW_BOOKMARKMAX - 1
+     endif
+     let cnt= cnt + 1
+    endwhile
+   endif
+
+  endif
+  call s:NetrwBookmarkMenu()
+"  call Dret("NetrwBookmarkDir")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
+"  list of the contents of a local or remote directory.  It is assumed that the
+"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
+"  with the requested remote hostname first.
+fun! s:NetrwBrowse(islocal,dirname)
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%").">")
+"  call Decho("tab#".tabpagenr()." win#".winnr())
+"  call Dredir("ls!")
+
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
+   return
+  endif
+  if !exists("*shellescape")
+   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
+"   call Dret("s:NetrwBrowse : missing shellescape()")
+   return
+  endif
+  if !exists("*fnameescape")
+   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70)
+"   call Dret("s:NetrwBrowse : missing fnameescape()")
+   return
+  endif
+
+  call s:NetrwOptionSave("w:")
+  call s:NetrwSafeOptions()
+
+  " re-instate any marked files
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+"   call Decho("clearing marked files")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+  endif
+
+  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
+"   call Decho("handle w:netrw_acdkeep:")
+"   call Decho("keepjumps lcd ".fnameescape(a:dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
+   exe 'keepjumps lcd '.fnameescape(a:dirname)
+"   call Decho("getcwd<".getcwd().">")
+
+  elseif !a:islocal && a:dirname !~ '[\/]$' && a:dirname !~ '^"'
+   " looks like a regular file, attempt transfer
+"   call Decho("attempt transfer as regular file<".a:dirname.">")
+
+   " remove any filetype indicator from end of dirname, except for the {{{3
+   " "this is a directory" indicator (/).
+   " There shouldn't be one of those here, anyway.
+   let path= substitute(a:dirname,'[*=@|]\r\=$','','e')
+"   call Decho("new path<".path.">")
+   call s:RemotePathAnalysis(a:dirname)
+
+   " remote-read the requested file into current buffer {{{3
+   mark '
+   call s:NetrwEnew(a:dirname)
+   setlocal ma noro
+"   call Decho("setlocal ma noro")
+   let b:netrw_curdir= a:dirname
+"   call Decho("exe silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
+   exe "silent! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
+   exe "silent keepalt doau BufReadPre ".fnameescape(s:fname)
+   silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
+   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz'
+    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
+    exe "silent keepalt doau BufReadPost ".fnameescape(s:fname)
+   endif
+
+   " save certain window-oriented variables into buffer-oriented variables {{{3
+   call s:SetBufWinVars()
+   call s:NetrwOptionRestore("w:")
+   setlocal ma nomod
+
+"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"   call Dret("s:NetrwBrowse : file<".s:fname.">")
+   return
+  endif
+
+  " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
+  call s:UseBufWinVars()
+
+  " set up some variables {{{3
+  let b:netrw_browser_active = 1
+  let dirname                = a:dirname
+  let s:last_sort_by         = g:netrw_sort_by
+
+  " set up menu {{{3
+  call s:NetrwMenu(1)
+
+  " set up buffer {{{3
+  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
+  " maintain markfile highlighting
+  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
+"   call Decho("bufnr(%)=".bufnr('%'))
+"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+  else
+"   call Decho("2match none")
+   2match none
+  endif
+  if reusing
+   call s:NetrwOptionRestore("w:")
+   setlocal noma nomod nowrap
+"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"   call Dret("s:NetrwBrowse : re-using buffer")
+   return
+  endif
+
+  " set b:netrw_curdir to the new directory name {{{3
+"  call Decho("set b:netrw_curdir to the new directory name:")
+   let b:netrw_curdir= dirname
+  if b:netrw_curdir =~ '[/\\]$'
+   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
+  endif
+  if b:netrw_curdir == ''
+   if has("amiga")
+    " On the Amiga, the empty string connotes the current directory
+    let b:netrw_curdir= getcwd()
+   else
+    " under unix, when the root directory is encountered, the result
+    " from the preceding substitute is an empty string.
+    let b:netrw_curdir= '/'
+   endif
+  endif
+  if !a:islocal && b:netrw_curdir !~ '/$'
+   let b:netrw_curdir= b:netrw_curdir.'/'
+  endif
+"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+
+  " ------------
+  " (local only) {{{3
+  " ------------
+  if a:islocal
+"   call Decho("local only:")
+
+   " Set up ShellCmdPost handling.  Append current buffer to browselist
+   call s:LocalFastBrowser()
+
+  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
+   if !g:netrw_keepdir
+"    call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"    call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
+    if !exists("&l:acd") || !&l:acd
+"     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
+     try
+      exe 'keepjumps lcd '.fnameescape(b:netrw_curdir)
+     catch /^Vim\%((\a\+)\)\=:E472/
+      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
+      if exists("w:netrw_prvdir")
+       let b:netrw_curdir= w:netrw_prvdir
+      else
+       call s:NetrwOptionRestore("w:")
+       setlocal noma nomod nowrap
+       let b:netrw_curdir= dirname
+"       call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"       call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
+       return
+      endif
+     endtry
+    endif
+   endif
+
+  " --------------------------------
+  " remote handling: {{{3
+  " --------------------------------
+  else
+"   call Decho("remote only:")
+
+   " analyze a:dirname and g:netrw_list_cmd {{{4
+"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> a:dirname<".a:dirname.">")
+   if a:dirname =~ "^NetrwTreeListing\>"
+    let dirname= b:netrw_curdir
+"    call Decho("(dirname was ".a:dirname.") dirname<".dirname.">")
+   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+    let dirname= substitute(b:netrw_curdir,'\\','/','g')
+    if dirname !~ '/$'
+     let dirname= dirname.'/'
+    endif
+    let b:netrw_curdir = dirname
+"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
+   else
+    let dirname = substitute(a:dirname,'\\','/','g')
+"    call Decho("(normal) dirname<".dirname.">")
+   endif
+
+   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+   if dirname !~ dirpat
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
+    endif
+    call s:NetrwOptionRestore("w:")
+    setlocal noma nomod nowrap
+"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
+    return
+   endif
+   let b:netrw_curdir= dirname
+"   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
+  endif  " (additional remote handling)
+
+  " -----------------------
+  " Directory Listing: {{{3
+  " -----------------------
+  call s:BrowserMaps(a:islocal)
+  call s:PerformListing(a:islocal)
+
+"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"  call Dret("s:NetrwBrowse : did PerformListing")
+  return
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwFileInfo: supports qf (query for file information) {{{2
+fun! s:NetrwFileInfo(islocal,fname)
+"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
+  if a:islocal
+   if (has("unix") || has("macunix")) && executable("/bin/ls")
+    if exists("b:netrw_curdir")
+"     call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>')
+     if b:netrw_curdir =~ '/$'
+      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname))
+     else
+      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname))
+     endif
+    else
+"     call Decho('using ls '.a:fname." using cwd<".getcwd().">")
+     echo system("/bin/ls -lsad ".shellescape(a:fname))
+    endif
+   else
+    " use vim functions to return information about file below cursor
+"    call Decho("using vim functions to query for file info")
+    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
+     let fname= substitute(a:fname,".$","","")
+    else
+     let fname= a:fname
+    endif
+    let t  = getftime(fname)
+    let sz = getfsize(fname)
+    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
+"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
+   endif
+  else
+   echo "sorry, \"qf\" not supported yet for remote files"
+  endif
+"  call Dret("s:NetrwFileInfo")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwGetBuffer: {{{2
+"   returns 0=cleared buffer
+"           1=re-used buffer
+fun! s:NetrwGetBuffer(islocal,dirname)
+"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
+  let dirname= a:dirname
+
+  " re-use buffer if possible {{{3
+"  call Decho("--re-use a buffer if possible--")
+  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+   " find NetrwTreeList buffer if there is one
+   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
+"    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
+    let eikeep= &ei
+    set ei=all
+    exe "b ".w:netrw_treebufnr
+    let &ei= eikeep
+"    call Dret("s:NetrwGetBuffer : bufnum#".bufnum."<NetrwTreeListing>")
+    return
+   endif
+   let bufnum= -1
+"   call Decho("  liststyle=TREE but w:netrw_treebufnr doesn't exist")
+
+  else
+   " find buffer number of buffer named precisely the same as dirname {{{3
+"   call Decho("--find buffer numnber of buffer named precisely the same as dirname--")
+"   call Dredir("ls!")
+
+   " get dirname and associated buffer number
+   let bufnum  = bufnr(escape(dirname,'\'))
+"   call Decho("  find buffer<".dirname.">'s number ")
+"   call Decho("  bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
+
+   if bufnum < 0 && dirname !~ '/$'
+    " trying appending a trailing /
+"    call Decho("  try appending a trailing / to dirname<".dirname.">")
+    let bufnum= bufnr(escape(dirname.'/','\'))
+    if bufnum > 0
+     let dirname= dirname.'/'
+    endif
+   endif
+
+   if bufnum < 0 && dirname =~ '/$'
+    " trying removing a trailing /
+"    call Decho("  try removing a trailing / from dirname<".dirname.">")
+    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
+    if bufnum > 0
+     let dirname= substitute(dirname,'/$','','')
+    endif
+   endif
+
+"   call Decho("  findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
+   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
+   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
+    " handle approximate matches
+"    call Decho("  handling approx match: bufnum#%d<".bufname(bufnum)."> approx=dirname<".dirname.">")
+    let ibuf    = 1
+    let buflast = bufnr("$")
+"    call Decho("  findbuf2: buflast=".buflast)
+    while ibuf <= buflast
+     let bname= substitute(bufname(ibuf),'\\','/','g')
+     let bname= substitute(bname,'.\zs/$','','')
+"     call Decho("  findbuf3: dirname<".dirname."> bufname(".ibuf.")<".bname.">")
+     if bname != '' && dirname =~ '/'.bname.'/\=$' | break | endif
+     if bname   =~ '^'.dirname.'/\=$' | break | endif
+     if dirname =~ '^'.bname.'/$'     | break | endif
+     let ibuf= ibuf + 1
+    endwhile
+    if ibuf > buflast
+     let bufnum= -1
+    else
+     let bufnum= ibuf
+    endif
+"    call Decho("  findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
+   endif
+  endif
+
+  " get enew buffer and name it -or- re-use buffer {{{3
+"  call Decho("--get enew buffer and name it OR re-use buffer-- (bufnum=".bufnum.")")
+  mark '
+  if bufnum < 0 || !bufexists(bufnum)
+   call s:NetrwEnew(dirname)
+"   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
+   " name the buffer
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+    " Got enew buffer; transform into a NetrwTreeListing
+"    call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
+    if !exists("s:netrw_treelistnum")
+     let s:netrw_treelistnum= 1
+    else
+     let s:netrw_treelistnum= s:netrw_treelistnum + 1
+    endif
+    let w:netrw_treebufnr= bufnr("%")
+"    call Decho("  exe silent! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
+    exe 'silent! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
+    nnoremap <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
+    nnoremap <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
+    nnoremap <silent> <buffer> [[       :silent call <SID>TreeListMove('[')<cr>
+    nnoremap <silent> <buffer> ]]       :silent call <SID>TreeListMove(']')<cr>
+"    call Decho("  tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
+   else
+"    let v:errmsg= "" " Decho
+    let escdirname= fnameescape(dirname)
+"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+"    call Decho('  exe silent! keepalt file '.escdirname)
+    exe 'silent! keepalt file '.escdirname
+"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+   endif
+"   call Decho("  named enew buffer#".bufnr("%")."<".bufname("%").">")
+
+  else " Re-use the buffer
+"   call Decho("--re-use buffer#".bufnum.": --")
+   let eikeep= &ei
+   set ei=all
+   if getline(2) =~ '^" Netrw Directory Listing'
+"    call Decho("  re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  keepalt b ".bufnum)
+    exe "keepalt b ".bufnum
+   else
+"    call Decho("  reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  b ".bufnum)
+    exe "b ".bufnum
+   endif
+   if bufname("%") == '.'
+"    call Decho("exe silent! keepalt file ".fnameescape(getcwd()))
+    exe "silent! keepalt file ".fnameescape(getcwd())
+   endif
+   let &ei= eikeep
+   if line("$") <= 1
+    call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
+    return 0
+   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+"    call Decho("--re-use tree listing--")
+"    call Decho("  clear buffer<".expand("%")."> with :%d")
+    silent %d
+    call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
+    return 0
+   else
+"    call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%"))
+    return 1
+   endif
+  endif
+
+  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
+  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
+  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
+  "  med    1         D      H
+  "  fast   2         H      H
+"  call Decho("--do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc--")
+  let fname= expand("%")
+  call s:NetrwListSettings(a:islocal)
+"  call Decho("exe keepalt file ".fnameescape(fname))
+  exe "keepalt file ".fnameescape(fname)
+
+  " delete all lines from buffer {{{3
+"  call Decho("--delete all lines from buffer--")
+"  call Decho("  clear buffer<".expand("%")."> with :%d")
+  keepalt silent! %d
+
+"  call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%"))
+  return 0
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwGetcwd: get the current directory. {{{2
+"   Change backslashes to forward slashes, if any.
+"   If doesc is true, escape certain troublesome characters
+fun! s:NetrwGetcwd(doesc)
+"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
+  let curdir= substitute(getcwd(),'\\','/','ge')
+  if curdir !~ '[\/]$'
+   let curdir= curdir.'/'
+  endif
+  if a:doesc
+   let curdir= fnameescape(curdir)
+  endif
+"  call Dret("NetrwGetcwd <".curdir.">")
+  return curdir
+endfun
+
+" ---------------------------------------------------------------------
+"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
+fun! s:NetrwGetWord()
+"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
+  call s:UseBufWinVars()
+
+  " insure that w:netrw_liststyle is set up
+  if !exists("w:netrw_liststyle")
+   if exists("g:netrw_liststyle")
+    let w:netrw_liststyle= g:netrw_liststyle
+   else
+    let w:netrw_liststyle= s:THINLIST
+   endif
+"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
+  endif
+
+  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
+   " Active Banner support
+"   call Decho("active banner handling")
+   norm! 0
+   let dirname= "./"
+   let curline= getline('.')
+
+   if curline =~ '"\s*Sorted by\s'
+    norm s
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "s" also works'
+
+   elseif curline =~ '"\s*Sort sequence:'
+    let s:netrw_skipbrowse= 1
+    echo 'Press "S" to edit sorting sequence'
+
+   elseif curline =~ '"\s*Quick Help:'
+    norm ?
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "?" also works'
+
+   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
+    norm a
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "a" also works'
+
+   elseif line("$") > w:netrw_bannercnt
+    exe 'silent keepjumps '.w:netrw_bannercnt
+   endif
+
+  elseif w:netrw_liststyle == s:THINLIST
+"   call Decho("thin column handling")
+   norm! 0
+   let dirname= getline('.')
+
+  elseif w:netrw_liststyle == s:LONGLIST
+"   call Decho("long column handling")
+   norm! 0
+   let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
+
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("treelist handling")
+   let dirname= substitute(getline('.'),'^\(| \)*','','e')
+
+  else
+"   call Decho("obtain word from wide listing")
+   let dirname= getline('.')
+
+   if !exists("b:netrw_cpf")
+    let b:netrw_cpf= 0
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+"   call Decho("computed cpf=".b:netrw_cpf)
+   endif
+
+"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
+   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
+"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
+"   call Decho("1: dirname<".dirname.">")
+   if filestart == 0
+    norm! 0ma
+   else
+    call cursor(line("."),filestart+1)
+    norm! ma
+   endif
+   let rega= @a
+   let eofname= filestart + b:netrw_cpf + 1
+   if eofname <= col("$")
+    call cursor(line("."),filestart+b:netrw_cpf+1)
+    norm! "ay`a
+   else
+    norm! "ay$
+   endif
+   let dirname = @a
+   let @a      = rega
+"   call Decho("2: dirname<".dirname.">")
+   let dirname= substitute(dirname,'\s\+$','','e')
+"   call Decho("3: dirname<".dirname.">")
+  endif
+
+  " symlinks are indicated by a trailing "@".  Remove it before further processing.
+  let dirname= substitute(dirname,"@$","","")
+
+  " executables are indicated by a trailing "*".  Remove it before further processing.
+  let dirname= substitute(dirname,"\*$","","")
+
+"  call Dret("s:NetrwGetWord <".dirname.">")
+  return dirname
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwListSettings: {{{2
+fun! s:NetrwListSettings(islocal)
+"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
+  let fname= bufname("%")
+"  call Decho("setlocal bt=nofile nobl ma nonu nowrap noro")
+  setlocal bt=nofile nobl ma nonu nowrap noro
+"  call Decho("exe keepalt file ".fnameescape(fname))
+  exe "keepalt file ".fnameescape(fname)
+  if g:netrw_use_noswf
+   setlocal noswf
+  endif
+"  call Dredir("ls!")
+"  call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
+  exe "setlocal ts=".g:netrw_maxfilenamelen
+  setlocal isk+=.,~,-
+  if g:netrw_fastbrowse > a:islocal
+   setlocal bh=hide
+  else
+   setlocal bh=delete
+  endif
+"  call Dret("s:NetrwListSettings")
+endfun
+
+" ---------------------------------------------------------------------
+"  s:NetrwListStyle: {{{2
+"  islocal=0: remote browsing
+"         =1: local browsing
+fun! s:NetrwListStyle(islocal)
+"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
+  let fname             = s:NetrwGetWord()
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
+"  call Decho("fname<".fname.">")
+"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
+"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
+
+  if w:netrw_liststyle == s:THINLIST
+   " use one column listing
+"   call Decho("use one column list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+
+  elseif w:netrw_liststyle == s:LONGLIST
+   " use long list
+"   call Decho("use long list")
+   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
+
+  elseif w:netrw_liststyle == s:WIDELIST
+   " give wide list
+"   call Decho("use wide list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("use tree list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+
+  else
+   call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
+   let g:netrw_liststyle = s:THINLIST
+   let w:netrw_liststyle = g:netrw_liststyle
+   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
+  endif
+  setlocal ma noro
+"  call Decho("setlocal ma noro")
+
+  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+  %d
+
+  " refresh the listing
+  let svpos= netrw#NetrwSavePosn()
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+  if w:netrw_liststyle != s:WIDELIST
+   if g:netrw_cursorline == 2
+    setlocal cursorline
+    let &cursorcolumn= s:netrw_usercuc
+   elseif g:netrw_cursorline
+    setlocal cursorline
+"    call Decho("setlocal cursorline")
+   endif
+  else
+   if g:netrw_cursorline == 2
+    setlocal cursorline cursorcolumn
+"    call Decho("setlocal cursorline cursorcolumn")
+   elseif g:netrw_cursorline
+    let &cursorline= s:netrw_usercul
+   endif
+  endif
+
+  " keep cursor on the filename
+  silent keepjumps $
+  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+  if result <= 0 && exists("w:netrw_bannercnt")
+   exe "keepjumps ".w:netrw_bannercnt
+  endif
+
+"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwBookmarkMenu: Uses menu priorities {{{2
+"                      .2.[cnt] for bookmarks, and
+"                      .3.[cnt] for history
+"                      (see s:NetrwMenu())
+fun! s:NetrwBookmarkMenu()
+  if !exists("s:netrw_menucnt")
+   return
+  endif
+"  call Dfunc("NetrwBookmarkMenu() bookmarkcnt=".g:NETRW_BOOKMARKMAX." histcnt=".g:NETRW_DIRHIST_CNT." menucnt=".s:netrw_menucnt)
+
+  " the following test assures that gvim is running, has menus available, and has menus enabled.
+  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+   if exists("g:NetrwTopLvlMenu")
+"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
+    exe 'silent! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
+   endif
+
+   " show bookmarked places
+   let cnt       = 1
+   while cnt <= g:NETRW_BOOKMARKMAX
+    if exists("g:NETRW_BOOKMARKDIR_{cnt}")
+     let bmdir= escape(g:NETRW_BOOKMARKDIR_{cnt},'. ')
+"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmdir.'	:e '.bmdir)
+     exe 'silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmdir.'	:e '.bmdir."\<cr>"
+    endif
+    let cnt= cnt + 1
+   endwhile
+
+   " show directory browsing history
+   let cnt     = g:NETRW_DIRHIST_CNT
+   let first   = 1
+   let histcnt = 0
+   while ( first || cnt != g:NETRW_DIRHIST_CNT )
+    let histcnt  = histcnt + 1
+    let priority = g:NETRW_DIRHIST_CNT + histcnt
+    if exists("g:NETRW_DIRHIST_{cnt}")
+     let bmdir= escape(g:NETRW_DIRHIST_{cnt},'/&? ')
+"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'	:e '.bmdir)
+     exe 'silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.bmdir.'	:e '.bmdir."\<cr>"
+    endif
+    let first = 0
+    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+    if cnt < 0
+     let cnt= cnt + g:netrw_dirhistmax
+    endif
+   endwhile
+  endif
+"  call Dret("NetrwBookmarkMenu")
+endfun
+
+" ---------------------------------------------------------------------
+"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
+"                       directory and a new directory name.  Also, if the
+"                       "new directory name" is actually a file,
+"                       NetrwBrowseChgDir() edits the file.
+fun! s:NetrwBrowseChgDir(islocal,newdir,...)
+"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
+
+  if !exists("b:netrw_curdir")
+   " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
+   " and the current window is the NetrwMessage window.
+"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
+"   call Decho("getcwd<".getcwd().">")
+"   call Dredir("ls!")
+"   call Dret("s:NetrwBrowseChgDir")
+   return
+  endif
+
+  call s:NetrwOptionSave("s:")
+  call s:NetrwSafeOptions()
+  let nbcd_curpos                = netrw#NetrwSavePosn()
+  let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
+  let dirname                    = substitute(b:netrw_curdir,'\\','/','ge')
+  let newdir                     = a:newdir
+  let dolockout                  = 0
+
+  " set up o/s-dependent directory recognition pattern
+  if has("amiga")
+   let dirpat= '[\/:]$'
+  else
+   let dirpat= '[\/]$'
+  endif
+"  call Decho("dirname<".dirname.">  dirpat<".dirpat.">")
+
+  if dirname !~ dirpat
+   " apparently vim is "recognizing" that it is in a directory and
+   " is removing the trailing "/".  Bad idea, so I put it back.
+   let dirname= dirname.'/'
+"   call Decho("adjusting dirname<".dirname.">")
+  endif
+
+  if newdir !~ dirpat
+   " ------------
+   " edit a file:
+   " ------------
+"   call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
+    let dirname= s:NetrwTreeDir()
+    if dirname =~ '/$'
+     let dirname= dirname.newdir
+    else
+     let dirname= s:NetrwTreeDir()."/".newdir
+    endif
+"    call Decho("tree listing")
+   elseif newdir =~ '^\(/\|\a:\)'
+    let dirname= newdir
+   else
+    let dirname= s:ComposePath(dirname,newdir)
+   endif
+"   call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
+   " this lets NetrwBrowseX avoid the edit
+   if a:0 < 1
+"    call Decho("set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
+    call s:NetrwOptionRestore("s:")
+    if !exists("s:didsplit")
+     if     g:netrw_browse_split == 1
+      new
+      wincmd _
+     elseif g:netrw_browse_split == 2
+      rightb vert new
+      wincmd |
+     elseif g:netrw_browse_split == 3
+      tabnew
+     elseif g:netrw_browse_split == 4
+      if s:NetrwPrevWinOpen(2) == 3
+"       call Dret("s:NetrwBrowseChgDir")
+       return
+      endif
+     else
+      " handling a file, didn't split, so remove menu
+"      call Decho("handling a file+didn't split, so remove menu")
+      call s:NetrwMenu(0)
+      " optional change to window
+      if g:netrw_chgwin >= 1
+       exe "keepjumps ".g:netrw_chgwin."wincmd w"
+      endif
+     endif
+    endif
+    " the point where netrw actually edits the (local) file
+    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
+    if a:islocal
+"     call Decho("edit local file: exe e! ".fnameescape(dirname))
+     exe "e! ".fnameescape(dirname)
+    else
+"     call Decho("remote file: NetrwBrowse will edit it")
+    endif
+    let dolockout= 1
+   endif
+
+  elseif newdir =~ '^/'
+   " ---------------------------------
+   " just go to the new directory spec
+   " ---------------------------------
+"   call Decho('case "just go to new directory spec": newdir<'.newdir.'>')
+   let dirname= newdir
+   call s:SetRexDir(a:islocal,dirname)
+   call s:NetrwOptionRestore("s:")
+
+  elseif newdir == './'
+   " --------------------------
+   " refresh the directory list
+   " --------------------------
+"   call Decho('case "refresh directory listing": newdir == "./"')
+   call s:SetRexDir(a:islocal,dirname)
+
+  elseif newdir == '../'
+   " -------------------
+   " go up one directory
+   " -------------------
+"   call Decho('case "go up one directory": newdir == "../"')
+
+   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+    " force a refresh
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    setlocal noro ma
+"    call Decho("setlocal noro ma")
+    keepjumps %d
+   endif
+
+   if has("amiga")
+    " amiga
+"    call Decho('case "go up one directory": newdir == "../" and amiga')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
+     let dirname= substitute(dirname,'/$','','')
+    else
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
+    endif
+"    call Decho("amiga: dirname<".dirname."> (go up one dir)")
+
+   else
+    " unix or cygwin
+"    call Decho('case "go up one directory": newdir == "../" and unix or cygwin')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
+     if dirname == ""
+      let dirname= '/'
+     endif
+    else
+     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
+    endif
+"    call Decho("unix: dirname<".dirname."> (go up one dir)")
+   endif
+   call s:SetRexDir(a:islocal,dirname)
+
+  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+"   call Decho('case liststyle is TREELIST and w:netrw_treedict exists')
+   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
+   setlocal noro ma
+"   call Decho("setlocal noro ma")
+   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    keepjumps %d
+   endif
+   let treedir      = s:NetrwTreeDir()
+   let s:treecurpos = nbcd_curpos
+   let haskey= 0
+"   call Decho("w:netrw_treedict<".string(w:netrw_treedict).">")
+
+   " search treedict for tree dir as-is
+   if has_key(w:netrw_treedict,treedir)
+"    call Decho('....searched for treedir<'.treedir.'> : found it!')
+    let haskey= 1
+   else
+"    call Decho('....searched for treedir<'.treedir.'> : not found')
+   endif
+
+   " search treedict for treedir with a / appended
+   if !haskey && treedir !~ '/$'
+    if has_key(w:netrw_treedict,treedir."/")
+     let treedir= treedir."/"
+"     call Decho('....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
+    else
+"     call Decho('....searched for treedir<'.treedir.'/> : not found')
+    endif
+   endif
+
+   " search treedict for treedir with any trailing / elided
+   if !haskey && treedir =~ '/$'
+    let treedir= substitute(treedir,'/$','','')
+    if has_key(w:netrw_treedict,treedir)
+"     call Decho('....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
+    else
+"     call Decho('....searched for treedir<'.treedir.'> : not found')
+    endif
+   endif
+
+   if haskey
+    " close tree listing for selected subdirectory
+"    call Decho("closing selected subdirectory<".dirname.">")
+    call remove(w:netrw_treedict,treedir)
+"    call Decho("removed     entry<".dirname."> from treedict")
+"    call Decho("yielding treedict<".string(w:netrw_treedict).">")
+    let dirname= w:netrw_treetop
+   else
+    " go down one directory
+    let dirname= substitute(treedir,'/*$','/','')
+"    call Decho("go down one dir: treedir<".treedir.">")
+   endif
+   call s:SetRexDir(a:islocal,dirname)
+
+  else
+   " go down one directory
+   let dirname= s:ComposePath(dirname,newdir)
+"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
+   call s:SetRexDir(a:islocal,dirname)
+  endif
+
+  call s:NetrwOptionRestore("s:")
+  if dolockout
+"   call Decho("doing modification lockout settings: ma nomod noro")
+   setlocal ma nomod noro
+"   call Decho("setlocal ma nomod noro")
+  endif
+
+"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
+  return dirname
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwBrowseX:  allows users to write custom functions to operate on {{{2
+"              files given their extension.  Passes 0=local, 1=remote
+fun! netrw#NetrwBrowseX(fname,remote)
+"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
+
+  " set up the filename
+  " (lower case the extension, make a local copy of a remote file)
+  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   let exten= substitute(exten,'^.*$','\L&\E','')
+  endif
+
+  " seems kde systems often have gnome-open due to dependencies, even though
+  " gnome-open's subsidiary display tools are largely absent.  Kde systems
+  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
+  if !exists("s:haskdeinit")
+   if has("unix")
+    let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
+    if v:shell_error
+     let s:haskdeinit = 0
+    endif
+   else
+    let s:haskdeinit= 0
+   endif
+"   call Decho("setting s:haskdeinit=".s:haskdeinit)
+  endif
+
+  if a:remote == 1
+   " create a local copy
+   let fname= fnamemodify(tempname(),":r").".".exten
+"   call Decho("a:remote=".a:remote.": create a local copy of <".fname."> as <".fname.">")
+   exe "silent keepjumps bot 1new ".fnameescape(fname)
+   setlocal bh=delete
+"   call Decho("read <".fnameescape(fname).">, now writing: exe w! ".fnameescape(fname))
+   exe "silent! w! ".fnameescape(fname)
+   q
+  else
+   let fname= a:fname
+  endif
+"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
+
+  " set up redirection
+  if &srr =~ "%s"
+   if (has("win32") || has("win95") || has("win64") || has("win16"))
+    let redir= substitute(&srr,"%s","nul","")
+   else
+    let redir= substitute(&srr,"%s","/dev/null","")
+   endif
+  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
+   let redir= &srr . "nul"
+  else
+   let redir= &srr . "/dev/null"
+  endif
+"  call Decho("redir{".redir."} srr{".&srr."}")
+
+  " extract any viewing options.  Assumes that they're set apart by quotes.
+  if exists("g:netrw_browsex_viewer")
+   if g:netrw_browsex_viewer =~ '\s'
+    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
+    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
+    let oviewer = ''
+    let cnt     = 1
+    while !executable(viewer) && viewer != oviewer
+     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
+     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
+     let cnt     = cnt + 1
+     let oviewer = viewer
+"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
+    endwhile
+   else
+    let viewer  = g:netrw_browsex_viewer
+    let viewopt = ""
+   endif
+"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
+  endif
+
+  " execute the file handler
+  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+
+  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+"   call Decho("exe silent !".viewer." ".viewopt.shellescape(fname,1).redir)
+   exe "silent !".viewer." ".viewopt.shellescape(fname,1).redir
+   let ret= v:shell_error
+
+  elseif has("win32") || has("win64")
+"   call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+   exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
+"   call Decho("exe silent !gnome-open ".shellescape(fname,1)." ".redir)
+   exe "silent !gnome-open ".shellescape(fname,1).redir
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("kfmclient") && s:haskdeinit
+"   call Decho("exe silent !kfmclient exec ".shellescape(fname,1)." ".redir)
+   exe "silent !kfmclient exec ".shellescape(fname,1)." ".redir
+   let ret= v:shell_error
+
+  elseif has("macunix") && executable("open")
+"   call Decho("exe silent !open ".shellescape(fname,1)." ".redir)
+   exe "silent !open ".shellescape(fname,1)." ".redir
+   let ret= v:shell_error
+
+  else
+   " netrwFileHandlers#Invoke() always returns 0
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+  endif
+
+  " if unsuccessful, attempt netrwFileHandlers#Invoke()
+  if ret
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+  endif
+
+  " restoring redraw! after external file handlers
+  redraw!
+
+  " cleanup: remove temporary file,
+  "          delete current buffer if success with handler,
+  "          return to prior buffer (directory listing)
+  "          Feb 12, 2008: had to de-activiate removal of
+  "          temporary file because it wasn't getting seen.
+"  if a:remote == 1 && fname != a:fname
+"   call Decho("deleting temporary file<".fname.">")
+"   call s:NetrwDelete(fname)
+"  endif
+
+  if a:remote == 1
+   setlocal bh=delete bt=nofile
+   if g:netrw_use_noswf
+    setlocal noswf
+   endif
+   exe "norm! \<c-o>"
+"   redraw!
+  endif
+
+"  call Dret("NetrwBrowseX")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#Explore: launch the local browser in the directory of the current file {{{2
+"          dosplit==0: the window will be split iff the current file has
+"                      been modified
+"          dosplit==1: the window will be split before running the local
+"                      browser
+fun! netrw#Explore(indx,dosplit,style,...)
+"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
+  if !exists("b:netrw_curdir")
+   let b:netrw_curdir= getcwd()
+"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
+  endif
+  let curfile= b:netrw_curdir
+"  call Decho("curfile<".curfile.">")
+
+  " save registers
+  silent! let keepregstar = @*
+  silent! let keepregplus = @+
+  silent! let keepregslash= @/
+
+  " if dosplit or file has been modified
+  if a:dosplit || &modified || a:style == 6
+"   call Decho("case: dosplit=".a:dosplit." modified=".&modified." a:style=".a:style)
+   call s:SaveWinVars()
+
+   if a:style == 0      " Explore, Sexplore
+"    call Decho("style=0: Explore or Sexplore")
+    exe g:netrw_winsize."wincmd s"
+
+   elseif a:style == 1  "Explore!, Sexplore!
+"    call Decho("style=1: Explore! or Sexplore!")
+    exe g:netrw_winsize."wincmd v"
+
+   elseif a:style == 2  " Hexplore
+"    call Decho("style=2: Hexplore")
+    exe "bel ".g:netrw_winsize."wincmd s"
+
+   elseif a:style == 3  " Hexplore!
+"    call Decho("style=3: Hexplore!")
+    exe "abo ".g:netrw_winsize."wincmd s"
+
+   elseif a:style == 4  " Vexplore
+"    call Decho("style=4: Vexplore")
+    exe "lefta ".g:netrw_winsize."wincmd v"
+
+   elseif a:style == 5  " Vexplore!
+"    call Decho("style=5: Vexplore!")
+    exe "rightb ".g:netrw_winsize."wincmd v"
+
+   elseif a:style == 6  " Texplore
+    call s:SaveBufVars()
+"    call Decho("style  = 6: Texplore")
+    tabnew
+    call s:RestoreBufVars()
+   endif
+   call s:RestoreWinVars()
+  endif
+  norm! 0
+
+  if a:0 > 0
+"   call Decho("case [a:0=".a:0."]>0: a:1<".a:1.">")
+   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
+    let dirname= substitute(a:1,'\~',expand("$HOME"),'')
+"    call Decho("using dirname<".dirname.">  (case: ~ && unix||cygwin)")
+   elseif a:1 == '.'
+    let dirname= exists("b:netrw_curdir")? b:netrw_curdir : getcwd()
+    if dirname !~ '/$'
+     let dirname= dirname."/"
+    endif
+"    call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
+   elseif a:1 =~ '\$'
+    let dirname= expand(a:1)
+   else
+    let dirname= a:1
+"    call Decho("using dirname<".dirname.">")
+   endif
+  else
+   " clear explore
+"   call Decho("clearing explore variables")
+   2match none
+   if exists("s:explore_match")        |unlet s:explore_match        |endif
+   if exists("s:explore_indx")         |unlet s:explore_indx         |endif
+   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
+   if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
+   if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
+   if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
+   if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
+   if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
+"   redraw!
+   echo " "
+   echo " "
+"   call Dret("netrw#Explore : cleared list")
+   return
+  endif
+
+  if dirname =~ '/\*\*/'
+   " handle .../**/.../filepat
+"   call Decho("case Explore .../**/.../filepat")
+   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
+   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
+    let b:netrw_curdir = prefixdir
+   else
+    let b:netrw_curdir= getcwd().'/'.prefixdir
+   endif
+   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
+   let starpat= 4;
+"   call Decho("pwd<".getcwd()."> dirname<".dirname.">")
+"   call Decho("case Explore ../**/../filepat (starpat=".starpat.")")
+
+  elseif dirname =~ '^\*//'
+   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
+"   call Decho("case Explore *//pattern")
+   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
+   let starpat= 1
+"   call Decho("Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+
+  elseif dirname =~ '^\*\*//'
+   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
+"   call Decho("case Explore **//pattern")
+   let pattern= substitute(dirname,'^\*\*//','','')
+   let starpat= 2
+"   call Decho("Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+
+  elseif dirname =~ '^\*/'
+   " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+   let starpat= 3
+"   call Decho("case Explore */filepat (starpat=".starpat.")")
+
+  elseif dirname=~ '^\*\*/'
+   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+   let starpat= 4
+"   call Decho("case Explore **/filepat (starpat=".starpat.")")
+  else
+   let starpat= 0
+  endif
+
+  if starpat == 0 && a:indx >= 0
+   " [Explore Hexplore Vexplore Sexplore] [dirname]
+"   call Decho("case dirname<".dirname."> a:indx=".a:indx.": Explore Hexplore Vexplore Sexplore")
+   if dirname == ""
+    let dirname= substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+   endif
+   if dirname =~ '^scp:' || dirname =~ '^ftp:'
+"    call Decho("calling NetrwBrowse(0,dirname<".dirname.">)")
+    call s:NetrwBrowse(0,dirname)
+   else
+    if dirname == ""|let dirname= getcwd()|endif
+"    call Decho("calling LocalBrowseCheck(dirname<".dirname.">)")
+    call netrw#LocalBrowseCheck(dirname)
+   endif
+
+"   call Decho("curfile<".curfile.">")
+   if has("win32") || has("win95") || has("win64") || has("win16")
+    call search('\<'.substitute(curfile,'^.*[/\\]','','e').'\>','cW')
+   else
+    call search('\<'.substitute(curfile,'^.*/','','e').'\>','cW')
+   endif
+
+  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+  elseif a:indx <= 0
+   " Nexplore, Pexplore, Explore: handle starpat
+"   call Decho("case Nexplore, Pexplore, <s-down>, <s-up>: starpat=".starpat." a:indx=".a:indx)
+   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
+"    call Decho("set up <s-up> and <s-down> maps")
+    let s:didstarstar= 1
+    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+   endif
+
+   if has("path_extra")
+"    call Decho("starpat=".starpat.": has +path_extra")
+    if !exists("w:netrw_explore_indx")
+     let w:netrw_explore_indx= 0
+    endif
+    let indx = a:indx
+"    call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]")
+"
+    if indx == -1
+     " Nexplore
+"     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
+      silent! let @* = keepregstar
+      silent! let @+ = keepregstar
+      silent! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
+     endif
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("indx=".indx." curfile<".curfile.">")
+     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
+      let indx= indx + 1
+"      call Decho("indx=".indx." (Nexplore while loop)")
+     endwhile
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+"     call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+
+    elseif indx == -2
+     " Pexplore
+"     call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
+      silent! let @* = keepregstar
+      silent! let @+ = keepregstar
+      silent! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
+     endif
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("indx=".indx." curfile<".curfile.">")
+     while indx >= 0 && curfile == w:netrw_explore_list[indx]
+      let indx= indx - 1
+"      call Decho("indx=".indx." (Pexplore while loop)")
+     endwhile
+     if indx < 0                        | let indx= 0                           | endif
+"     call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+
+    else
+     " Explore -- initialize
+     " build list of files to Explore with Nexplore/Pexplore
+"     call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")")
+     let w:netrw_explore_indx= 0
+     if !exists("b:netrw_curdir")
+      let b:netrw_curdir= getcwd()
+     endif
+"     call Decho("starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
+
+     " switch on starpat to build the w:netrw_explore_list of files
+     if starpat == 1
+      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+"      call Decho("starpat=".starpat.": build *//pattern list")
+      exe "vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
+      let w:netrw_explore_list = map(getqflist(),'bufname(v:val.bufnr)')
+      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+
+     elseif starpat == 2
+      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+"      call Decho("starpat=".starpat.": build **//pattern list")
+      try
+       exe "silent vimgrep /".pattern."/gj "."**/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+      	call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
+       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+       silent! let @* = keepregstar
+       silent! let @+ = keepregstar
+       silent! let @/ = keepregslash
+"       call Dret("netrw#Explore : no files matched pattern")
+       return
+      endtry
+      let s:netrw_curdir       = b:netrw_curdir
+      let w:netrw_explore_list = getqflist()
+      let w:netrw_explore_list = map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)')
+
+     elseif starpat == 3
+      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+"      call Decho("starpat=".starpat.": build */filepat list")
+      let dirname             = substitute(dirname,'^\*/','','')
+      if dirname !~ '\$*?[' && (!filereadable(dirname) || !filewritable(dirname))
+"       call Dret("netrw#Explore : no files matched pattern")
+       call netrw#ErrorMsg(s:NOTE,"no files matched Explore pattern",72)
+       return
+      endif
+      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
+      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+
+     elseif starpat == 4
+      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+"      call Decho("starpat=".starpat.": build **/filepat list")
+      let w:netrw_explore_list= split(expand(b:netrw_curdir."/".dirname),'\n')
+      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+     endif " switch on starpat to build w:netrw_explore_list
+
+     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+"     call Decho("w:netrw_explore_list<".string(w:netrw_explore_list).">")
+"     call Decho("w:netrw_explore_listlen=".w:netrw_explore_listlen)
+
+     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
+      call netrw#ErrorMsg(s:WARNING,"no files matched",42)
+      silent! let @* = keepregstar
+      silent! let @+ = keepregstar
+      silent! let @/ = keepregslash
+"      call Dret("netrw#Explore : no files matched")
+      return
+     endif
+    endif  " if indx ... endif
+
+    " NetrwStatusLine support - for exploring support
+    let w:netrw_explore_indx= indx
+"    call Decho("explorelist<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
+
+    " wrap the indx around, but issue a note
+    if indx >= w:netrw_explore_listlen || indx < 0
+"     call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
+     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
+     let w:netrw_explore_indx= indx
+     call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
+    endif
+
+    exe "let dirfile= w:netrw_explore_list[".indx."]"
+"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+    let newdir= substitute(dirfile,'/[^/]*$','','e')
+"    call Decho("newdir<".newdir.">")
+
+"    call Decho("calling LocalBrowseCheck(newdir<".newdir.">)")
+    call netrw#LocalBrowseCheck(newdir)
+    if !exists("w:netrw_liststyle")
+     let w:netrw_liststyle= g:netrw_liststyle
+    endif
+    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
+     call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
+    else
+     call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+    endif
+    let w:netrw_explore_mtchcnt = indx + 1
+    let w:netrw_explore_bufnr   = bufnr("%")
+    let w:netrw_explore_line    = line(".")
+    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
+"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
+
+   else
+"    call Decho("your vim does not have +path_extra")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
+    endif
+    silent! let @* = keepregstar
+    silent! let @+ = keepregstar
+    silent! let @/ = keepregslash
+"    call Dret("netrw#Explore : missing +path_extra")
+    return
+   endif
+
+  else
+"   call Decho("case Explore newdir<".dirname.">")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
+    silent! unlet w:netrw_treedict
+    silent! unlet w:netrw_treetop
+   endif
+   let newdir= dirname
+   if !exists("b:netrw_curdir")
+    call netrw#LocalBrowseCheck(getcwd())
+   else
+    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
+   endif
+  endif
+
+  " visual display of **/ **// */ Exploration files
+  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
+   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
+    " only update match list if current directory isn't the same as before
+    let s:explore_prvdir = b:netrw_curdir
+    let s:explore_match  = ""
+    let dirlen           = strlen(b:netrw_curdir)
+    if b:netrw_curdir !~ '/$'
+     let dirlen= dirlen + 1
+    endif
+    let prvfname= ""
+    for fname in w:netrw_explore_list
+"     call Decho("fname<".fname.">")
+     if fname =~ '^'.b:netrw_curdir
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+      endif
+     elseif fname !~ '^/' && fname != prvfname
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+      endif
+     endif
+     let prvfname= fname
+    endfor
+"    call Decho("explore_match<".s:explore_match.">")
+    exe "2match netrwMarkFile /".s:explore_match."/"
+   endif
+   echo "<s-up>==Pexplore  <s-down>==Nexplore"
+  else
+   2match none
+   if exists("s:explore_match")  | unlet s:explore_match  | endif
+   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
+   echo " "
+"   call Decho("cleared explore match list")
+  endif
+
+  silent! let @* = keepregstar
+  silent! let @+ = keepregstar
+  silent! let @/ = keepregslash
+"  call Dret("netrw#Explore : @/<".@/.">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwHide: this function is invoked by the "a" map for browsing {{{2
+"          and switches the hiding mode.  The actual hiding is done by
+"          s:NetrwListHide().
+"             g:netrw_hide= 0: show all
+"                           1: show not-hidden files
+"                           2: show hidden files only
+fun! s:NetrwHide(islocal)
+"  call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide)
+  let svpos= netrw#NetrwSavePosn()
+
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+"   call Decho(((g:netrw_hide == 1)? "unhide" : "hide")." files in markfilelist<".string(s:netrwmarkfilelist_{bufnr("%")}).">")
+"   call Decho("g:netrw_list_hide<".g:netrw_list_hide.">")
+
+   " hide the files in the markfile list
+   for fname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk)
+    if match(g:netrw_list_hide,'\<'.fname.'\>') != -1
+     " remove fname from hiding list
+     let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','')
+     let g:netrw_list_hide= substitute(g:netrw_list_hide,',,',',','g')
+     let g:netrw_list_hide= substitute(g:netrw_list_hide,'^,\|,$','','')
+"     call Decho("unhide: g:netrw_list_hide<".g:netrw_list_hide.">")
+    else
+     " append fname to hiding list
+     if exists("g:netrw_list_hide") && g:netrw_list_hide != ""
+      let g:netrw_list_hide= g:netrw_list_hide.',\<'.escape(fname,g:netrw_fname_escape).'\>'
+     else
+      let g:netrw_list_hide= '\<'.escape(fname,g:netrw_fname_escape).'\>'
+     endif
+"     call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">")
+    endif
+   endfor
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+   let g:netrw_hide= 1
+
+  else
+
+   " switch between show-all/show-not-hidden/show-hidden
+   let g:netrw_hide=(g:netrw_hide+1)%3
+   exe "norm! 0"
+   if g:netrw_hide && g:netrw_list_hide == ""
+    call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
+"    call Dret("NetrwHide")
+    return
+   endif
+  endif
+
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("NetrwHide")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwHidden: invoked by "gh" {{{2
+fun! s:NetrwHidden(islocal)
+"  call Dfunc("s:NetrwHidden()")
+  "  save current position
+  let svpos= netrw#NetrwSavePosn()
+
+  if g:netrw_list_hide =~ '\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+'
+   " remove pattern from hiding list
+   let g:netrw_list_hide= substitute(g:netrw_list_hide,'\(^\|,\)\\(^\\|\\s\\s\\)\\zs\\.\\S\\+','','')
+  elseif strlen(g:netrw_list_hide) >= 1
+   let g:netrw_list_hide= g:netrw_list_hide . ',\(^\|\s\s\)\zs\.\S\+'
+  else
+   let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
+  endif
+
+  " refresh screen and return to saved position
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("s:NetrwHidden")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
+fun! s:NetrwLeftmouse(islocal)
+"  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
+  if a:islocal
+   if exists("b:netrw_curdir")
+    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+   endif
+  else
+   if exists("b:netrw_curdir")
+    call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   endif
+  endif
+"  call Dret("s:NetrwLeftmouse")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
+" separated patterns given in g:netrw_list_hide
+fun! s:NetrwListHide()
+"  call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
+
+  " find a character not in the "hide" string to use as a separator for :g and :v commands
+  " How-it-works: take the hiding command, convert it into a range.  Duplicate
+  " characters don't matter.  Remove all such characters from the '/~...90'
+  " string.  Use the first character left as a separator character.
+  let listhide= g:netrw_list_hide
+  let sep     = strpart(substitute('/~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1)
+"  call Decho("sep=".sep)
+
+  while listhide != ""
+   if listhide =~ ','
+    let hide     = substitute(listhide,',.*$','','e')
+    let listhide = substitute(listhide,'^.\{-},\(.*\)$','\1','e')
+   else
+    let hide     = listhide
+    let listhide = ""
+   endif
+
+   " Prune the list by hiding any files which match
+   if g:netrw_hide == 1
+"    call Decho("hiding<".hide."> listhide<".listhide.">")
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
+   elseif g:netrw_hide == 2
+"    call Decho("showing<".hide."> listhide<".listhide.">")
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
+   endif
+  endwhile
+  if g:netrw_hide == 2
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
+  endif
+
+"  call Dret("NetrwListHide")
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwHideEdit: allows user to edit the file/directory hiding list
+fun! s:NetrwHideEdit(islocal)
+"  call Dfunc("NetrwHideEdit(islocal=".a:islocal.")")
+
+  " save current cursor position
+  let svpos= netrw#NetrwSavePosn()
+
+  " get new hiding list from user
+  call inputsave()
+  let newhide= input("Edit Hiding List: ",g:netrw_list_hide)
+  call inputrestore()
+  let g:netrw_list_hide= newhide
+"  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
+
+  " refresh the listing
+  silent call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
+
+  " restore cursor position
+  call netrw#NetrwRestorePosn(svpos)
+
+"  call Dret("NetrwHideEdit")
+endfun
+
+" ---------------------------------------------------------------------
+" NetSortSequence: allows user to edit the sorting sequence
+fun! s:NetSortSequence(islocal)
+"  call Dfunc("NetSortSequence(islocal=".a:islocal.")")
+
+  let svpos= netrw#NetrwSavePosn()
+  call inputsave()
+  let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
+  call inputrestore()
+
+  " refresh the listing
+  let g:netrw_sort_sequence= newsortseq
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+
+"  call Dret("NetSortSequence")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMakeDir: this function makes a directory (both local and remote) {{{2
+fun! s:NetrwMakeDir(usrhost)
+"  call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)")
+
+  " get name of new directory from user.  A bare <CR> will skip.
+  " if its currently a directory, also request will be skipped, but with
+  " a message.
+  call inputsave()
+  let newdirname= input("Please give directory name: ")
+  call inputrestore()
+"  call Decho("newdirname<".newdirname.">")
+
+  if newdirname == ""
+"   call Dret("NetrwMakeDir : user aborted with bare <cr>")
+   return
+  endif
+
+  if a:usrhost == ""
+"   call Decho("local mkdir")
+
+   " Local mkdir:
+   " sanity checks
+   let fullnewdir= b:netrw_curdir.'/'.newdirname
+"   call Decho("fullnewdir<".fullnewdir.">")
+   if isdirectory(fullnewdir)
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
+    endif
+"    call Dret("NetrwMakeDir : directory<".newdirname."> exists previously")
+    return
+   endif
+   if s:FileReadable(fullnewdir)
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
+    endif
+"    call Dret("NetrwMakeDir : file<".newdirname."> exists previously")
+    return
+   endif
+
+   " requested new local directory is neither a pre-existing file or
+   " directory, so make it!
+   if exists("*mkdir")
+    call mkdir(fullnewdir,"p")
+   else
+    let netrw_origdir= s:NetrwGetcwd(1)
+    exe 'keepjumps lcd '.fnameescape(b:netrw_curdir)
+"    call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
+"    call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1))
+    exe "silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
+    if !g:netrw_keepdir
+     exe 'keepjumps lcd '.fnameescape(netrw_origdir)
+"     call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
+    endif
+   endif
+
+   if v:shell_error == 0
+    " refresh listing
+"    call Decho("refresh listing")
+    let svpos= netrw#NetrwSavePosn()
+    call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+    call netrw#NetrwRestorePosn(svpos)
+   elseif !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",26)
+   endif
+"   redraw!
+
+  elseif !exists("b:netrw_method") || b:netrw_method == 4
+   " Remote mkdir:
+"   call Decho("remote mkdir")
+   let mkdircmd  = s:MakeSshCmd(g:netrw_mkdir_cmd)
+   let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
+"   call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname,1))
+   exe "silent! !".mkdircmd." ".shellescape(newdirname,1)
+   if v:shell_error == 0
+    " refresh listing
+    let svpos= netrw#NetrwSavePosn()
+    call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+    call netrw#NetrwRestorePosn(svpos)
+   elseif !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
+   endif
+"   redraw!
+
+  elseif b:netrw_method == 2
+   " COMBAK -- future work
+   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
+  elseif b:netrw_method == 3
+   " COMBAK -- future work
+   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
+  endif
+
+"  call Dret("NetrwMakeDir")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFile: (invoked by mf) This function is used to both {{{2
+"                  mark and unmark files.  If a markfile list exists,
+"                  then the rename and delete functions will use it instead
+"                  of whatever may happen to be under the cursor at that
+"                  moment.  When the mouse and gui are available,
+"                  shift-leftmouse may also be used to mark files.
+"
+"  Creates two lists
+"    s:netrwmarkfilelist    -- holds complete paths to all marked files
+"    s:netrwmarkfilelist_#  -- holds list of marked files in current-buffer's directory (#==bufnr())
+"
+"  Creates a marked file match string
+"    s:netrwmarfilemtch_#   -- used with 2match to display marked files
+"
+"  Creates a buffer version of islocal
+"    b:netrw_islocal
+"
+fun! s:NetrwMarkFile(islocal,fname)
+"  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
+  let curbufnr= bufnr("%")
+  let curdir  = b:netrw_curdir
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   " markfile list exists
+"   call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
+"   call Decho("starting s:netrwmarkfilemtch_{curbufnr}<".s:netrwmarkfilemtch_{curbufnr}.">")
+   let b:netrw_islocal= a:islocal
+
+   if index(s:netrwmarkfilelist_{curbufnr},a:fname) == -1
+    " append filename to buffer's markfilelist
+"    call Decho("append filename<".a:fname."> to local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
+    call add(s:netrwmarkfilelist_{curbufnr},a:fname)
+    let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(a:fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+
+   else
+    " remove filename from buffer's markfilelist
+"    call Decho("remove filename<".a:fname."> from local markfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
+    call filter(s:netrwmarkfilelist_{curbufnr},'v:val != a:fname')
+    if s:netrwmarkfilelist_{curbufnr} == []
+     " local markfilelist is empty; remove it entirely
+"     call Decho("markfile list now empty")
+     call s:NetrwUnmarkList(curbufnr,curdir)
+    else
+     " rebuild match list to display markings correctly
+"     call Decho("rebuild s:netrwmarkfilemtch_".curbufnr)
+     let s:netrwmarkfilemtch_{curbufnr}= ""
+     let first                           = 1
+     for fname in s:netrwmarkfilelist_{curbufnr}
+      if first
+       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+      else
+       let s:netrwmarkfilemtch_{curbufnr}= s:netrwmarkfilemtch_{curbufnr}.'\|\<'.escape(fname,g:netrw_markfileesc."'".g:netrw_markfileesc."'").'\>'
+      endif
+      let first= 0
+     endfor
+"     call Decho("ending s:netrwmarkfilelist_"curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
+"     call Decho("ending s:netrwmarkfilemtch_"curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
+    endif
+   endif
+
+  else
+   " initialize new markfilelist
+
+"   call Decho("add fname<".a:fname."> to new markfilelist_".curbufnr)
+   let s:netrwmarkfilelist_{curbufnr}= []
+   call add(s:netrwmarkfilelist_{curbufnr},a:fname)
+"   call Decho("ending s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
+
+   " build initial markfile matching pattern
+   if a:fname =~ '/$'
+    let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc)
+   else
+    let s:netrwmarkfilemtch_{curbufnr}= '\<'.escape(a:fname,g:netrw_markfileesc).'\>'
+   endif
+"   call Decho("ending s:netrwmarkfilemtch_".curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
+  endif
+
+  " handle global markfilelist
+  if exists("s:netrwmarkfilelist")
+   let dname= s:ComposePath(b:netrw_curdir,a:fname)
+   if index(s:netrwmarkfilelist,dname) == -1
+    " append new filename to global markfilelist
+    call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname))
+"    call Decho("append filename<".a:fname."> to global markfilelist<".string(s:netrwmarkfilelist).">")
+   else
+    " remove new filename from global markfilelist
+"    call Decho("filter(".string(s:netrwmarkfilelist).",'v:val != '.".dname.")")
+    call filter(s:netrwmarkfilelist,'v:val != "'.dname.'"')
+"    call Decho("ending s:netrwmarkfilelist  <".string(s:netrwmarkfilelist).">")
+    if s:netrwmarkfilelist == []
+     unlet s:netrwmarkfilelist
+    endif
+   endif
+  else
+   " initialize new global-directory markfilelist
+   let s:netrwmarkfilelist= []
+   call add(s:netrwmarkfilelist,s:ComposePath(b:netrw_curdir,a:fname))
+"   call Decho("init s:netrwmarkfilelist<".string(s:netrwmarkfilelist).">")
+  endif
+
+  " set up 2match'ing to netrwmarkfilemtch list
+  if exists("s:netrwmarkfilemtch_{curbufnr}") && s:netrwmarkfilemtch_{curbufnr} != ""
+"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{curbufnr}."/"
+  else
+"   call Decho("2match none")
+   2match none
+  endif
+"  call Dret("s:NetrwMarkFile : netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileCompress: (invoked by mz) This function is used to {{{2
+"                          compress/decompress files using the programs
+"                          in g:netrw_compress and g:netrw_uncompress,
+"                          using g:netrw_compress_suffix to know which to
+"                          do.  By default:
+"                            g:netrw_compress        = "gzip"
+"                            g:netrw_decompress      = { ".gz" : "gunzip" , ".bz2" : "bunzip2" , ".zip" : "unzip" , ".tar" : "tar -xf"}
+fun! s:NetrwMarkFileCompress(islocal)
+"  call Dfunc("s:NetrwMarkFileCompress(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress")
+   for fname in s:netrwmarkfilelist_{curbufnr}
+    " for every filename in the marked list
+    for sfx in sort(keys(g:netrw_decompress))
+     if fname =~ '\'.sfx.'$'
+      " fname has a suffix indicating that its compressed; apply associated decompression routine
+      let exe= s:WinPath(g:netrw_decompress[sfx])
+"      call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
+      if a:islocal
+       if g:netrw_keepdir
+        let fname= shellescape(s:ComposePath(curdir,fname))
+       endif
+      else
+       let fname= shellescape(b:netrw_curdir.fname,1)
+      endif
+      if executable(exe)
+       if a:islocal
+	call system(exe." ".fname)
+       else
+        call s:RemoteSystem(exe." ".fname)
+       endif
+      else
+       call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
+      endif
+      break
+     endif
+    endfor
+    if exists("exe")
+     unlet exe
+    elseif a:islocal
+     " fname not a compressed file, so compress it
+     call system(s:WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname)))
+    else
+     " fname not a compressed file, so compress it
+     call s:RemoteSystem(s:WinPath(g:netrw_compress)." ".shellescape(fname))
+    endif
+   endfor
+   call s:NetrwUnmarkList(curbufnr,curdir)
+   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   call netrw#NetrwRestorePosn(svpos)
+  endif
+"  call Dret("s:NetrwMarkFileCompress")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileCopy: (invoked by mc) copy marked files to target {{{2
+"                      If no marked files, then set up directory as the
+"                      target.  Currently does not support copying entire
+"                      directories.  Uses the local-buffer marked file list.
+"                      Returns 1=success  (used by NetrwMarkFileMove())
+"                              0=failure
+fun! s:NetrwMarkFileCopy(islocal)
+"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">")
+
+  " sanity checks
+  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
+   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileCopy 0")
+   return 0
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+  if !exists("s:netrwmftgt")
+   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
+"   call Dret("s:NetrwMarkFileCopy 0")
+   return 0
+  endif
+"  call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">")
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  if      a:islocal &&  s:netrwmftgt_islocal
+   " Copy marked files, local directory to local directory
+"   call Decho("copy from local to local")
+   let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
+"   call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
+   call system(s:WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
+
+  elseif  a:islocal && !s:netrwmftgt_islocal
+   " Copy marked files, local directory to remote directory
+"   call Decho("copy from local to remote")
+   call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+
+  elseif !a:islocal &&  s:netrwmftgt_islocal
+"   call Decho("copy from remote to local")
+   call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+
+  elseif !a:islocal && !s:netrwmftgt_islocal
+"   call Decho("copy from remote to remote")
+   let curdir = getcwd()
+   let tmpdir = s:GetTempfile("")
+   if tmpdir !~ '/'
+    let tmpdir= curdir."/".tmpdir
+   endif
+   if exists("*mkdir")
+    call mkdir(tmpdir)
+   else
+    exe "silent! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
+   endif
+   if isdirectory(tmpdir)
+    exe "keepjumps lcd ".fnameescape(tmpdir)
+    call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
+    let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")')
+    call s:NetrwUpload(localfiles,s:netrwmftgt)
+    if getcwd() == tmpdir
+     for fname in s:netrwmarkfilelist_{bufnr('%')}
+      call s:NetrwDelete(fname)
+     endfor
+     exe "keepjumps lcd ".fnameescape(curdir)
+     exe "silent !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
+    else
+     exe "keepjumps lcd ".fnameescape(curdir)
+    endif
+   endif
+  endif
+
+  " -------
+  " cleanup
+  " -------
+"  call Decho("cleanup")
+
+  " remove markings from local buffer
+  call s:NetrwUnmarkList(curbufnr,curdir)
+
+  " refresh buffers
+  if !s:netrwmftgt_islocal
+   call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
+  endif
+  if a:islocal
+   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
+  endif
+  call s:LocalBrowseShellCmdRefresh()
+  
+"  call Dret("s:NetrwMarkFileCopy 1")
+  return 1
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileDiff: (invoked by md) This function is used to {{{2
+"                      invoke vim's diff mode on the marked files.
+"                      Either two or three files can be so handled.
+"                      Uses the global marked file list.
+fun! s:NetrwMarkFileDiff(islocal)
+"  call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
+  let curbufnr= bufnr("%")
+
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   let cnt    = 0
+   let curdir = b:netrw_curdir
+   for fname in s:netrwmarkfilelist
+    let cnt= cnt + 1
+    if cnt == 1
+"     call Decho("diffthis: fname<".fname.">")
+     exe "e ".fnameescape(fname)
+     diffthis
+    elseif cnt == 2 || cnt == 3
+     vsplit
+     wincmd l
+"     call Decho("diffthis: ".fname)
+     exe "e ".fnameescape(fname)
+     diffthis
+    else
+     break
+    endif
+   endfor
+   call s:NetrwUnmarkList(curbufnr,curdir)
+  endif
+
+"  call Dret("s:NetrwMarkFileDiff")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileEdit: (invoked by me) put marked files on arg list and start editing them {{{2
+"                       Uses global markfilelist
+fun! s:NetrwMarkFileEdit(islocal)
+"  call Dfunc("s:NetrwMarkFileEdit(islocal=".a:islocal.")")
+
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   call s:SetRexDir(a:islocal,curdir)
+   let flist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
+   " unmark markedfile list
+"   call s:NetrwUnmarkList(curbufnr,curdir)
+   call s:NetrwUnmarkAll()
+"   call Decho("exe silent args ".flist)
+   exe "silent args ".flist
+  endif
+  
+"  call Dret("s:NetrwMarkFileEdit")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary command on marked files, one at a time {{{2
+"                     Uses the local marked-file list.
+fun! s:NetrwMarkFileExe(islocal)
+"  call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   " get the command
+   call inputsave()
+   let cmd= input("Enter command: ","","file")
+   call inputrestore()
+"   call Decho("cmd<".cmd.">")
+
+   " apply command to marked files.  Substitute: filename -> %
+   " If no %, then append a space and the filename to the command
+   for fname in s:netrwmarkfilelist_{curbufnr}
+    if a:islocal
+     if g:netrw_keepdir
+      let fname= shellescape(s:WinPath(s:ComposePath(curdir,fname)))
+     endif
+    else
+     let fname= shellescape(s:WinPath(b:netrw_curdir.fname))
+    endif
+    if cmd =~ '%'
+     let xcmd= substitute(cmd,'%',fname,'g')
+    else
+     let xcmd= cmd.' '.fname
+    endif
+    if a:islocal
+"     call Decho("local: xcmd<".xcmd.">")
+     let ret= system(xcmd)
+    else
+"     call Decho("remote: xcmd<".xcmd.">")
+     let ret= s:RemoteSystem(xcmd)
+    endif
+    if v:shell_error < 0
+     call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
+     break
+    else
+     echo ret
+    endif
+   endfor
+
+   " unmark marked file list
+   call s:NetrwUnmarkList(curbufnr,curdir)
+
+   " refresh the listing
+   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   call netrw#NetrwRestorePosn(svpos)
+  else
+   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+  endif
+  
+"  call Dret("s:NetrwMarkFileExe")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkHideSfx: (invoked by mh) (un)hide files having same suffix
+"                  as the marked file(s) (toggles suffix presence)
+"                  Uses the local marked file list.
+fun! s:NetrwMarkHideSfx(islocal)
+"  call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curbufnr = bufnr("%")
+
+  " s:netrwmarkfilelist_{curbufnr}: the List of marked files
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+
+   for fname in s:netrwmarkfilelist_{curbufnr}
+"     call Decho("s:NetrwMarkFileCopy: fname<".fname.">")
+     " construct suffix pattern
+     if fname =~ '\.'
+      let sfxpat= "^.*".substitute(fname,'^.*\(\.[^. ]\+\)$','\1','')
+     else
+      let sfxpat= '^\%(\%(\.\)\@!.\)*$'
+     endif
+     " determine if its in the hiding list or not
+     let inhidelist= 0
+     if g:netrw_list_hide != ""
+      let itemnum = 0
+      let hidelist= split(g:netrw_list_hide,',')
+      for hidepat in hidelist
+       if sfxpat == hidepat
+        let inhidelist= 1
+        break
+       endif
+       let itemnum= itemnum + 1
+      endfor
+     endif
+"     call Decho("fname<".fname."> inhidelist=".inhidelist." sfxpat<".sfxpat.">")
+     if inhidelist
+      " remove sfxpat from list
+      call remove(hidelist,itemnum)
+      let g:netrw_list_hide= join(hidelist,",")
+     elseif g:netrw_list_hide != ""
+      " append sfxpat to non-empty list
+      let g:netrw_list_hide= g:netrw_list_hide.",".sfxpat
+     else
+      " set hiding list to sfxpat
+      let g:netrw_list_hide= sfxpat
+     endif
+    endfor
+
+   " refresh the listing
+   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   call netrw#NetrwRestorePosn(svpos)
+  else
+   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+  endif
+
+"  call Dret("s:NetrwMarkHideSfx")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileGrep: (invoked by mg) This function applies vimgrep to marked files {{{2
+"                     Uses the global markfilelist
+fun! s:NetrwMarkFileGrep(islocal)
+"  call Dfunc("s:NetrwMarkFileGrep(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curbufnr = bufnr("%")
+
+  if exists("s:netrwmarkfilelist")
+"  call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
+   let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
+   call s:NetrwUnmarkAll()
+
+   " ask user for pattern
+   call inputsave()
+   let pat= input("Enter pattern: ","")
+   call inputrestore()
+   if pat !~ '^\s'
+    if pat !~ '^/'
+     let pat= '/'.pat.'/'
+    endif
+    let pat= " ".pat
+   endif
+
+   " use vimgrep for both local and remote
+"   call Decho("exe vimgrep".pat." ".netrwmarkfilelist)
+   exe "vimgrep".pat." ".netrwmarkfilelist
+
+   2match none
+   call netrw#NetrwRestorePosn(svpos)
+  endif
+
+"  call Dret("s:NetrwMarkFileGrep")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileMove: (invoked by mm) execute arbitrary command on marked files, one at a time {{{2
+"                      uses the global marked file list
+"                      s:netrwmfloc= 0: target directory is remote
+"                                  = 1: target directory is local
+fun! s:NetrwMarkFileMove(islocal)
+"  call Dfunc("s:NetrwMarkFileMove(islocal=".a:islocal.")")
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
+   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileMove")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+  if !exists("s:netrwmftgt")
+   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
+"   call Dret("s:NetrwMarkFileCopy 0")
+   return 0
+  endif
+"  call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">")
+
+  if      a:islocal &&  s:netrwmftgt_islocal
+   " move: local -> local
+"   call Decho("move from local to local")
+"   call Decho("(s:NetrwMarkFileMove) local to local move")
+   if executable(g:netrw_localmovecmd)
+    for fname in s:netrwmarkfilelist_{bufnr("%")}
+"     call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")")
+     let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt))
+     if v:shell_error < 0
+      call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
+      break
+     endif
+    endfor
+   else
+    call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57)
+   endif
+
+  elseif  a:islocal && !s:netrwmftgt_islocal
+   " move: local -> remote
+"   call Decho("move from local to remote")
+"   call Decho("copy")
+   let mflist= s:netrwmarkfilelist_{bufnr("%")}
+   call s:NetrwMarkFileCopy(a:islocal)
+"   call Decho("remove")
+   for fname in mflist
+    let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
+    let ok        = s:NetrwLocalRmFile(b:netrw_curdir,barefname,1)
+   endfor
+   unlet mflist
+
+  elseif !a:islocal &&  s:netrwmftgt_islocal
+   " move: remote -> local
+"   call Decho("move from remote to local")
+"   call Decho("copy")
+   let mflist= s:netrwmarkfilelist_{bufnr("%")}
+   call s:NetrwMarkFileCopy(a:islocal)
+"   call Decho("remove")
+   for fname in mflist
+    let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
+    let ok        = s:NetrwRemoteRmFile(b:netrw_curdir,barefname,1)
+   endfor
+   unlet mflist
+
+  elseif !a:islocal && !s:netrwmftgt_islocal
+   " move: remote -> remote
+"   call Decho("move from remote to remote")
+"   call Decho("copy")
+   let mflist= s:netrwmarkfilelist_{bufnr("%")}
+   call s:NetrwMarkFileCopy(a:islocal)
+"   call Decho("remove")
+   for fname in mflist
+    let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
+    let ok        = s:NetrwRemoteRmFile(b:netrw_curdir,barefname,1)
+   endfor
+   unlet mflist
+  endif
+
+  " -------
+  " cleanup
+  " -------
+"  call Decho("cleanup")
+
+  " remove markings from local buffer
+  call s:NetrwUnmarkList(curbufnr,curdir)                   " remove markings from local buffer
+
+  " refresh buffers
+  if !s:netrwmftgt_islocal
+   call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
+  endif
+  if a:islocal
+   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
+  endif
+  call s:LocalBrowseShellCmdRefresh()
+  
+"  call Dret("s:NetrwMarkFileMove")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFilePrint: (invoked by mp) This function prints marked files {{{2
+"                       using the hardcopy command.  Local marked-file list only.
+fun! s:NetrwMarkFilePrint(islocal)
+"  call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")")
+  let curbufnr= bufnr("%")
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr}
+   let curdir            = b:netrw_curdir
+   call s:NetrwUnmarkList(curbufnr,curdir)
+   for fname in netrwmarkfilelist
+    if a:islocal
+     if g:netrw_keepdir
+      let fname= s:ComposePath(curdir,fname)
+     endif
+    else
+     let fname= curdir.fname
+    endif
+    1split
+    " the autocmds will handle both local and remote files
+"    call Decho("exe silent e ".escape(fname,' '))
+    exe "silent e ".fnameescape(fname)
+"    call Decho("hardcopy")
+    hardcopy
+    q
+   endfor
+   2match none
+  endif
+"  call Dret("s:NetrwMarkFilePrint")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2
+"                        files when given a regexp (for which a prompt is
+"                        issued).
+fun! s:NetrwMarkFileRegexp(islocal)
+"  call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")")
+
+  " get the regular expression
+  call inputsave()
+  let regexp= input("Enter regexp: ","","file")
+  call inputrestore()
+
+  if a:islocal
+   " get the matching list of files using local glob()
+"   call Decho("handle local regexp")
+   let dirname  = escape(b:netrw_curdir,g:netrw_glob_escape)
+   let filelist = glob(s:ComposePath(dirname,regexp))
+   if filelist != ""
+    let filelist= filelist."\n"
+   endif
+
+  " mark the list of files
+  while filelist != ""
+   if filelist =~ '\n'
+    let filename = substitute(filelist,'\n.*$','','e')
+    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
+   else
+    let filename = filelist
+    let filelist = ""
+   endif
+"   call Decho("filelist<".filelist.">")
+"   call Decho("filename<".filename.">")
+   call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
+  endwhile
+
+  else
+"   call Decho("handle remote regexp")
+
+   " convert displayed listing into a filelist
+   let eikeep = &ei
+   let areg   = @a
+   silent %y a
+   set ei=all ma
+"   call Decho("set ei=all ma")
+   1split
+   enew
+   silent norm! "ap
+   2
+   let bannercnt= search('^" =====','W')
+   exe "silent 1,".bannercnt."d"
+   set bt=nofile
+   if     g:netrw_liststyle == s:LONGLIST
+    silent %s/\s\{2,}\S.*$//e
+   elseif g:netrw_liststyle == s:WIDELIST
+    silent %s/\s\{2,}/\r/ge
+   elseif g:netrw_liststyle == s:TREELIST
+    silent %s/^| //e
+    silent! g/^ .*$/d
+   endif
+   " convert regexp into the more usual glob-style format
+   let regexp= substitute(regexp,'\*','.*','g')
+"   call Decho("regexp<".regexp.">")
+   exe "silent! v/".escape(regexp,'/')."/d"
+   let filelist= getline(1,line("$"))
+   q!
+   for filename in filelist
+    call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
+   endfor
+   unlet filelist
+   let @a  = areg
+   let &ei = eikeep
+  endif
+
+"  call Dret("s:NetrwMarkFileRegexp")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileSource: (invoked by ms) This function sources marked files {{{2
+"                        Uses the local marked file list.
+fun! s:NetrwMarkFileSource(islocal)
+"  call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")")
+  let curbufnr= bufnr("%")
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")}
+   let curdir            = b:netrw_curdir
+   call s:NetrwUnmarkList(curbufnr,curdir)
+   for fname in netrwmarkfilelist
+    if a:islocal
+     if g:netrw_keepdir
+      let fname= s:ComposePath(curdir,fname)
+     endif
+    else
+     let fname= curdir.fname
+    endif
+    " the autocmds will handle sourcing both local and remote files
+"    call Decho("exe so ".fnameescape(fname))
+    exe "so ".fnameescape(fname)
+   endfor
+   2match none
+  endif
+"  call Dret("s:NetrwMarkFileSource")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileTag: (invoked by mT) This function applies g:netrw_ctags to marked files {{{2
+"                     Uses the global markfilelist
+fun! s:NetrwMarkFileTag(islocal)
+"  call Dfunc("s:NetrwMarkFileTag(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  if exists("s:netrwmarkfilelist")
+"   call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
+   let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "shellescape(v:val,".!a:islocal.")"))
+   call s:NetrwUnmarkAll()
+
+   if a:islocal
+    if executable(g:netrw_ctags)
+"     call Decho("call system(".g:netrw_ctags." ".netrwmarkfilelist.")")
+     call system(g:netrw_ctags." ".netrwmarkfilelist)
+    else
+     call netrw#ErrorMsg(s:ERROR,"g:netrw_ctags<".g:netrw_ctags."> is not executable!",51)
+    endif
+   else
+    let cmd   = s:RemoteSystem(g:netrw_ctags." ".netrwmarkfilelist)
+    call netrw#NetrwObtain(a:islocal,"tags")
+    let curdir= b:netrw_curdir
+    1split
+    e tags
+    let path= substitute(curdir,'^\(.*\)/[^/]*$','\1/','')
+"    call Decho("curdir<".curdir."> path<".path.">")
+    exe '%s/\t\(\S\+\)\t/\t'.escape(path,"/\n\r\\").'\1\t/e'
+    wq!
+   endif
+   2match none
+   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   call netrw#NetrwRestorePosn(svpos)
+  endif
+
+"  call Dret("s:NetrwMarkFileTag")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileTgt:  (invoked by mt) This function sets up a marked file target {{{2
+"   Sets up two variables, 
+"     s:netrwmftgt : holds the target directory
+"     s:netrwmftgt_islocal : 0=target directory is remote
+"                    1=target directory is local
+fun! s:NetrwMarkFileTgt(islocal)
+"  call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")")
+  let svpos  = netrw#NetrwSavePosn()
+  let curdir = b:netrw_curdir
+  let hadtgt = exists("s:netrwmftgt")
+  if !exists("w:netrw_bannercnt")
+   let w:netrw_bannercnt= b:netrw_bannercnt
+  endif
+
+  " set up target
+  if line(".") < w:netrw_bannercnt
+   " if cursor in banner region, use b:netrw_curdir for the target
+   let s:netrwmftgt= b:netrw_curdir
+"   call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
+
+  else
+   " get word under cursor.
+   "  * If directory, use it for the target.
+   "  * If file, use b:netrw_curdir for the target
+   let curword= s:NetrwGetWord()
+   let tgtdir = s:ComposePath(curdir,curword)
+   if a:islocal && isdirectory(tgtdir)
+    let s:netrwmftgt = tgtdir
+"    call Decho("local isdir: s:netrwmftgt<".s:netrwmftgt.">")
+   elseif !a:islocal && tgtdir =~ '/$'
+    let s:netrwmftgt = tgtdir
+"    call Decho("remote isdir: s:netrwmftgt<".s:netrwmftgt.">")
+   else
+    let s:netrwmftgt = curdir
+"    call Decho("isfile: s:netrwmftgt<".s:netrwmftgt.">")
+   endif
+  endif
+  if a:islocal
+   " simplify the target (eg. /abc/def/../ghi -> /abc/ghi)
+   let s:netrwmftgt= simplify(s:netrwmftgt)
+"   call Decho("simplify: s:netrwmftgt<".s:netrwmftgt.">")
+  endif
+  if g:netrw_cygwin
+   let s:netrwmftgt= substitute(system("cygpath ".shellescape(s:netrwmftgt)),'\n$','','')
+   let s:netrwmftgt= substitute(s:netrwmftgt,'\n$','','')
+  endif
+  let s:netrwmftgt_islocal= a:islocal
+
+  if g:netrw_fastbrowse > 0
+   call s:LocalBrowseShellCmdRefresh()
+  endif
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+  if !hadtgt
+   norm! j
+  endif
+
+"  call Dret("s:NetrwMarkFileTgt : netrwmftgt<".(exists("s:netrwmftgt")? s:netrwmftgt : "").">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwOpenFile: query user for a filename and open it {{{2
+fun! s:NetrwOpenFile(islocal)
+"  call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")")
+  call inputsave()
+  let fname= input("Enter filename: ")
+  call inputrestore()
+  if fname !~ '[/\\]'
+   if exists("b:netrw_curdir")
+    if exists("g:netrw_quiet")
+     let netrw_quiet_keep = g:netrw_quiet
+    endif
+    let g:netrw_quiet    = 1
+    if b:netrw_curdir =~ '/$'
+     exe "e ".fnameescape(b:netrw_curdir.fname)
+    else
+     exe "e ".fnameescape(b:netrw_curdir."/".fname)
+    endif
+    if exists("netrw_quiet_keep")
+     let g:netrw_quiet= netrw_quiet_keep
+    else
+     unlet g:netrw_quiet
+    endif
+   endif
+  else
+   exe "e ".fnameescape(fname)
+  endif
+"  call Dret("s:NetrwOpenFile")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2
+fun! s:NetrwUnmarkList(curbufnr,curdir)
+"  call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)")
+
+  "  remove all files in local marked-file list from global list
+  if exists("s:netrwmarkfilelist_{a:curbufnr}")
+   for mfile in s:netrwmarkfilelist_{a:curbufnr}
+    let dfile = s:ComposePath(a:curdir,mfile)       " prepend directory to mfile
+    let idx   = index(s:netrwmarkfilelist,dfile)    " get index in list of dfile
+    call remove(s:netrwmarkfilelist,idx)            " remove from global list
+   endfor
+   if s:netrwmarkfilelist == []
+    unlet s:netrwmarkfilelist
+   endif
+ 
+   " getting rid of the local marked-file lists is easy
+   unlet s:netrwmarkfilelist_{a:curbufnr}
+  endif
+  if exists("s:netrwmarkfilemtch_{a:curbufnr}")
+   unlet s:netrwmarkfilemtch_{a:curbufnr}
+  endif
+  2match none
+"  call Dret("s:NetrwUnmarkList")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwUnmarkAll: remove the global marked file list and all local ones {{{2
+fun! s:NetrwUnmarkAll()
+"  call Dfunc("s:NetrwUnmarkAll()")
+  if exists("s:netrwmarkfilelist")
+   unlet s:netrwmarkfilelist
+  endif
+  silent call s:NetrwUnmarkAll2()
+  2match none
+"  call Dret("s:NetrwUnmarkAll")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwUnmarkAll2: {{{2
+fun! s:NetrwUnmarkAll2()
+"  call Dfunc("s:NetrwUnmarkAll2()")
+  redir => netrwmarkfilelist_let
+  let
+  redir END
+  let netrwmarkfilelist_list= split(netrwmarkfilelist_let,'\n')          " convert let string into a let list
+  call filter(netrwmarkfilelist_list,"v:val =~ '^s:netrwmarkfilelist_'") " retain only those vars that start as s:netrwmarkfilelist_ 
+  call map(netrwmarkfilelist_list,"substitute(v:val,'\\s.*$','','')")    " remove what the entries are equal to
+  for flist in netrwmarkfilelist_list
+   let curbufnr= substitute(flist,'s:netrwmarkfilelist_','','')
+   unlet s:netrwmarkfilelist_{curbufnr}
+   unlet s:netrwmarkfilemtch_{curbufnr}
+  endfor
+"  call Dret("s:NetrwUnmarkAll2")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwUnMarkFile: {{{2
+fun! s:NetrwUnMarkFile(islocal)
+"  call Dfunc("s:NetrwUnMarkFile(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curbufnr = bufnr("%")
+
+  " unmark marked file list (although I expect s:NetrwUpload()
+  " to do it, I'm just making sure)
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+"   call Decho("unlet'ing: s:netrwmarkfile[list|mtch]_".bufnr("%"))
+   unlet s:netrwmarkfilelist
+   unlet s:netrwmarkfilelist_{curbufnr}
+   unlet s:netrwmarkfilemtch_{curbufnr}
+   2match none
+  endif
+
+"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("s:NetrwUnMarkFile")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMenu: generates the menu for gvim and netrw {{{2
+fun! s:NetrwMenu(domenu)
+
+  if !exists("g:NetrwMenuPriority")
+   let g:NetrwMenuPriority= 80
+  endif
+
+  if has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
+
+   if !exists("s:netrw_menu_enabled") && a:domenu
+"    call Decho("initialize menu")
+    let s:netrw_menu_enabled= 1
+    exe 'silent! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
+    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4
+    exe 'silent! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-	:'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.8.2   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete<tab>mB	mB'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.8.3   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Bookmark<tab>gb	gb'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab>'."<ctrl-h>	\<Plug>NetrwHideEdit"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<Plug>NetrwRefresh"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.11.2  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.11.3  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.11.4  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.11.5  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.1  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.2  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.3  '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.4  '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.5  '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.6  '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.7  '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.8  '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.9  '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.15    '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.16.1  '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i	i'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.16.2  '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a	a'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.16.3  '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
+    exe 'silent! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s	s'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
+    exe 'silent! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
+    let s:netrw_menucnt= 28
+
+   elseif !a:domenu
+    let s:netrwcnt = 0
+    let curwin     = winnr()
+    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
+    exe curwin."wincmd w"
+
+    if s:netrwcnt <= 1
+"     call Decho("clear menus")
+     exe 'silent! unmenu '.g:NetrwTopLvlMenu
+"     call Decho('exe silent! unmenu '.g:NetrwTopLvlMenu.'*')
+     silent! unlet s:netrw_menu_enabled
+    endif
+   endif
+"   call Dret("NetrwMenu")
+  endif
+
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
+"                Used by the O maps (as <SID>NetrwObtain())
+fun! s:NetrwObtain(islocal)
+"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
+
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
+   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
+   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
+  else
+   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
+  endif
+
+"  call Dret("NetrwObtain")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetrwObtain: {{{2
+"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
+"     islocal=0  obtain from remote source
+"            =1  obtain from local source
+"     fname  :   a filename or a list of filenames
+"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
+fun! netrw#NetrwObtain(islocal,fname,...)
+"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
+  " NetrwStatusLine support - for obtaining support
+
+  if type(a:fname) == 1
+   let fnamelist= [ a:fname ]
+  elseif type(a:fname) == 3
+   let fnamelist= a:fname
+  else
+   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
+"   call Dret("netrw#NetrwObtain")
+   return
+  endif
+"  call Decho("fnamelist<".string(fnamelist).">")
+  if a:0 > 0
+   let tgtdir= a:1
+  else
+   let tgtdir= getcwd()
+  endif
+"  call Decho("tgtdir<".tgtdir.">")
+
+  if exists("b:netrw_islocal") && b:netrw_islocal
+   " obtain a file from local b:netrw_curdir to (local) tgtdir
+"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
+   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
+    let topath= s:ComposePath(tgtdir,"")
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+     " transfer files one at time
+"     call Decho("transfer files one at a time")
+     for fname in fnamelist
+"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
+      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+     endfor
+    else
+     " transfer files with one command
+"     call Decho("transfer files with one command")
+     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
+"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
+     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+    endif
+   elseif !exists("b:netrw_curdir")
+    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
+   else
+    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
+   endif
+
+  else
+   " obtain files from remote b:netrw_curdir to local tgtdir
+"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
+   if type(a:fname) == 1
+    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
+   endif
+   call s:NetrwMethod(b:netrw_curdir)
+
+   if b:netrw_method == 4
+    " obtain file using scp
+"    call Decho("obtain via scp (method#4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
+    else
+     let useport= ""
+    endif
+    if b:netrw_fname =~ '/'
+     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
+    else
+     let path= ""
+    endif
+    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
+
+   elseif b:netrw_method == 2
+    " obtain file using ftp + .netrc
+"     call Decho("obtain via ftp+.netrc (method #2)")
+     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
+     let tmpbufnr= bufnr("%")
+     setlocal ff=unix
+     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+      put =g:netrw_ftpmode
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     if exists("b:netrw_fname") && b:netrw_fname != ""
+      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     if exists("g:netrw_ftpextracmd")
+      put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline('$'))
+     endif
+     for fname in fnamelist
+      call setline(line("$")+1,'get "'.fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endfor
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     else
+"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep= &debug
+      setlocal debug=msg
+      call netrw#ErrorMsg(s:ERROR,getline(1),4)
+      let &debug= debugkeep
+     endif
+
+   elseif b:netrw_method == 3
+    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
+"    call Decho("obtain via ftp+mipf (method #3)")
+    call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
+    let tmpbufnr= bufnr("%")
+    setlocal ff=unix
+
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('$'))
+    else
+     put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+"     call Decho("filter input: ".getline('$'))
+     put ='\"'.s:netrw_passwd.'\"'
+"     call Decho("filter input: ".getline('$'))
+    else
+     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("b:netrw_fname") && b:netrw_fname != ""
+     call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("g:netrw_ftpextracmd")
+     put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("g:netrw_ftpextracmd")
+     put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('$'))
+    endif
+    for fname in fnamelist
+     call setline(line("$")+1,'get "'.fname.'"')
+    endfor
+"    call Decho("filter input: ".getline('$'))
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+"     call Decho("error<".getline(1).">")
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),5)
+     endif
+    endif
+   elseif !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetrwObtain : unsupported method")
+    return
+   endif
+
+   " restore status line
+   if type(a:fname) == 1 && exists("s:netrw_users_stl")
+    call s:SetupNetrwStatusLine(s:netrw_users_stl)
+   endif
+
+  endif
+
+  " cleanup
+  if exists("tmpbufnr")
+   if bufnr("%") != tmpbufnr
+    exe tmpbufnr."bw!"
+   else
+    q!
+   endif
+  endif
+
+"  call Dret("netrw#NetrwObtain")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwPrevWinOpen: open file/directory in previous window.  {{{2
+"   If there's only one window, then the window will first be split.
+"   Returns:
+"     choice = 0 : didn't have to choose
+"     choice = 1 : saved modified file in window first
+"     choice = 2 : didn't save modified file, opened window
+"     choice = 3 : cancel open
+fun! s:NetrwPrevWinOpen(islocal)
+"  call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")")
+
+  " grab a copy of the b:netrw_curdir to pass it along to newly split windows
+  let curdir    = b:netrw_curdir
+
+  " get last window number and the word currently under the cursor
+  let lastwinnr = winnr("$")
+  let curword   = s:NetrwGetWord()
+  let choice    = 0
+"  call Decho("lastwinnr=".lastwinnr." curword<".curword.">")
+
+  let didsplit  = 0
+  if lastwinnr == 1
+   " if only one window, open a new one first
+"   call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
+   if g:netrw_preview
+"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s")
+    exe (g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s"
+   else
+"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
+    exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   endif
+   let didsplit  = 1
+
+  else
+   call s:SaveBufVars()
+"   call Decho("wincmd p")
+   wincmd p
+   call s:RestoreBufVars()
+   " if the previous window's buffer has been changed (is modified),
+   " and it doesn't appear in any other extant window, then ask the
+   " user if s/he wants to abandon modifications therein.
+   let bnr    = winbufnr(0)
+   let bnrcnt = 0
+   if &mod
+"    call Decho("detected: prev window's buffer has been modified: bnr=".bnr." winnr#".winnr())
+    let eikeep= &ei
+    set ei=all
+    windo if winbufnr(0) == bnr | let bnrcnt=bnrcnt+1 | endif
+    exe bnr."wincmd p"
+    let &ei= eikeep
+"    call Decho("bnr=".bnr." bnrcnt=".bnrcnt." buftype=".&bt." winnr#".winnr())
+    if bnrcnt == 1
+     let bufname= bufname(winbufnr(winnr()))
+     let choice= confirm("Save modified file<".bufname.">?","&Yes\n&No\n&Cancel")
+"     call Decho("bufname<".bufname."> choice=".choice." winnr#".winnr())
+
+     if choice == 1
+      " Yes -- write file & then browse
+      let v:errmsg= ""
+      silent w
+      if v:errmsg != ""
+       call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30)
+       if didsplit
+       	q
+       else
+       	wincmd p
+       endif
+"       call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">")
+       return choice
+      endif
+
+     elseif choice == 2
+      " No -- don't worry about changed file, just browse anyway
+      setlocal nomod
+      call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
+      wincmd p
+
+     else
+      " Cancel -- don't do this
+      if didsplit
+       q
+      else
+       wincmd p
+      endif
+"      call Dret("NetrwPrevWinOpen ".choice." : cancelled")
+      return choice
+     endif
+    endif
+   endif
+  endif
+
+  " restore b:netrw_curdir (window split/enew may have lost it)
+  let b:netrw_curdir= curdir
+  if a:islocal < 2
+   if a:islocal
+    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(a:islocal,curword))
+   else
+    call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,curword))
+   endif
+  endif
+"  call Dret("NetrwPrevWinOpen ".choice)
+  return choice
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwUpload: load fname to tgt (used by NetrwMarkFileCopy()) {{{2
+"                Always assumed to be local -> remote
+"                call s:NetrwUpload(filename, target)
+"                call s:NetrwUpload(filename, target, fromdirectory)
+fun! s:NetrwUpload(fname,tgt,...)
+"  call Dfunc("s:NetrwUpload(fname<".((type(a:fname) == 1)? a:fname : string(a:fname))."> tgt<".a:tgt.">) a:0=".a:0)
+
+  if a:tgt =~ '^\a\+://'
+   let tgtdir= substitute(a:tgt,'^\a\+://[^/]\+/\(.\{-}\)$','\1','')
+  else
+   let tgtdir= substitute(a:tgt,'^\(.*\)/[^/]*$','\1','')
+  endif
+"  call Decho("tgtdir<".tgtdir.">")
+
+  if a:0 > 0
+   let fromdir= a:1
+  else
+   let fromdir= getcwd()
+  endif
+"  call Decho("fromdir<".fromdir.">")
+
+  if type(a:fname) == 1
+   " handle uploading a single file using NetWrite
+"   call Decho("handle uploading a single file via NetWrite")
+   1split
+"   call Decho("exe e ".fnameescape(a:fname))
+   exe "e ".fnameescape(a:fname)
+"   call Decho("now locally editing<".expand("%").">, has ".line("$")." lines")
+   if a:tgt =~ '/$'
+    let wfname= substitute(a:fname,'^.*/','','')
+"    call Decho("exe w! ".fnameescape(wfname))
+    exe "w! ".fnameescape(a:tgt.wfname)
+   else
+"    call Decho("writing local->remote: exe w ".fnameescape(a:tgt))
+    exe "w ".fnameescape(a:tgt)
+"    call Decho("done writing local->remote")
+   endif
+   q!
+
+  elseif type(a:fname) == 3
+   " handle uploading a list of files via scp
+"   call Decho("handle uploading a list of files via scp")
+   let curdir= getcwd()
+   if a:tgt =~ '^scp:'
+    exe "keepjumps silent lcd ".fnameescape(fromdir)
+    let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')})
+    let args    = join(map(filelist,"shellescape(v:val, 1)"))
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
+    else
+     let useport= ""
+    endif
+    let machine = substitute(a:tgt,'^scp://\([^/:]\+\).*$','\1','')
+    let tgt     = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','')
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)
+    exe "keepjumps silent lcd ".fnameescape(curdir)
+
+   elseif a:tgt =~ '^ftp:'
+    call s:NetrwMethod(a:tgt)
+
+    if b:netrw_method == 2
+     " handle uploading a list of files via ftp+.netrc
+     let netrw_fname = b:netrw_fname
+     silent keepjumps new
+"     call Decho("filter input window#".winnr())
+
+     put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('$'))
+
+     if exists("g:netrw_ftpextracmd")
+      put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     call setline(line("$")+1,'lcd "'.fromdir.'"')
+"     call Decho("filter input: ".getline('$'))
+
+     call setline(line("$")+1,'cd "'.tgtdir.'"')
+"     call Decho("filter input: ".getline('$'))
+
+     for fname in a:fname
+      call setline(line("$")+1,'put "'.fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endfor
+
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     else
+"      call Decho("filter input window#".winnr())
+"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     silent g/Local directory now/d
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      call netrw#ErrorMsg(s:ERROR,getline(1),14)
+     else
+      bw!|q
+     endif
+
+    elseif b:netrw_method == 3
+     " upload with ftp + machine, id, passwd, and fname (ie. no .netrc)
+     let netrw_fname= b:netrw_fname
+     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
+     let tmpbufnr= bufnr("%")
+     setlocal ff=unix
+
+     if exists("g:netrw_port") && g:netrw_port != ""
+      put ='open '.g:netrw_machine.' '.g:netrw_port
+"      call Decho("filter input: ".getline('$'))
+     else
+      put ='open '.g:netrw_machine
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      put =g:netrw_uid
+"      call Decho("filter input: ".getline('$'))
+      call setline(line("$")+1,'"'.s:netrw_passwd.'"')
+"      call Decho("filter input: ".getline('$'))
+     else
+      put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     call setline(line("$")+1,'lcd "'.fromdir.'"')
+"     call Decho("filter input: ".getline('$'))
+
+     if exists("b:netrw_fname") && b:netrw_fname != ""
+      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     if exists("g:netrw_ftpextracmd")
+      put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline('$'))
+     endif
+
+     for fname in a:fname
+      call setline(line("$")+1,'put "'.fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endfor
+
+     " perform ftp:
+     " -i       : turns off interactive prompting from ftp
+     " -n  unix : DON'T use <.netrc>, even though it exists
+     " -n  win32: quit being obnoxious about password
+     norm! 1Gdd
+"     call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n")
+     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     silent g/Local directory now/d
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep= &debug
+      setlocal debug=msg
+      call netrw#ErrorMsg(s:ERROR,getline(1),15)
+      let &debug = debugkeep
+      let mod    = 1
+     else
+      bw!|q
+     endif
+    elseif !exists("b:netrw_method") || b:netrw_method < 0
+"     call Dfunc("netrw#NetrwUpload : unsupported method")
+     return
+    endif
+   else
+    call netrw#ErrorMsg(s:ERROR,"can't obtain files with protocol from<".a:tgt.">",63)
+   endif
+  endif
+
+"  call Dret("s:NetrwUpload")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwPreview: {{{2
+fun! s:NetrwPreview(path) range
+"  call Dfunc("NetrwPreview(path<".a:path.">)")
+  call s:NetrwOptionSave("s:")
+  call s:NetrwSafeOptions()
+  if has("quickfix")
+   if !isdirectory(a:path)
+    exe (g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path)
+   elseif !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
+   endif
+  elseif !exists("g:netrw_quiet")
+   call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
+  endif
+  call s:NetrwOptionRestore("s:")
+"  call Dret("NetrwPreview")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRefresh: {{{2
+fun! s:NetrwRefresh(islocal,dirname)
+"  call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction)
+  " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first.
+  " NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
+  " Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
+  setlocal ma noro
+"  call Decho("setlocal ma noro")
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+  %d
+  if a:islocal
+   call netrw#LocalBrowseCheck(a:dirname)
+  else
+   call s:NetrwBrowse(a:islocal,a:dirname)
+  endif
+  call netrw#NetrwRestorePosn()
+
+  " restore file marks
+  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
+"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+  else
+"   call Decho("2match none")
+   2match none
+  endif
+
+"  redraw!
+"  call Dret("NetrwRefresh")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRefreshDir: refreshes a directory by name {{{2
+"                    Called by NetrwMarkFileCopy()
+"                    Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh()
+fun! s:NetrwRefreshDir(islocal,dirname)
+"  call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) fastbrowse=".g:netrw_fastbrowse)
+  if g:netrw_fastbrowse == 0
+   " slowest mode (keep buffers refreshed, local or remote)
+"   call Decho("slowest mode: keep buffers refreshed, local or remote")
+   let tgtwin= bufwinnr(a:dirname)
+"   call Decho("tgtwin= bufwinnr(".a:dirname.")=".tgtwin)
+
+   if tgtwin > 0
+    " tgtwin is being displayed, so refresh it
+    let curwin= winnr()
+"    call Decho("refresh tgtwin#".tgtwin." (curwin#".curwin.")")
+    exe tgtwin."wincmd w"
+    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 
+    exe curwin."wincmd w"
+
+   elseif bufnr(a:dirname) > 0
+    let bn= bufnr(a:dirname)
+"    call Decho("bd bufnr(".a:dirname.")=".bn)
+    exe "silent bd ".bn
+   endif
+
+  elseif g:netrw_fastbrowse <= 1
+"   call Decho("medium-speed mode: refresh local buffers only")
+   call s:LocalBrowseShellCmdRefresh()
+  endif
+"  call Dret("s:NetrwRefreshDir")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwSetSort: sets up the sort based on the g:netrw_sort_sequence {{{2
+"          What this function does is to compute a priority for the patterns
+"          in the g:netrw_sort_sequence.  It applies a substitute to any
+"          "files" that satisfy each pattern, putting the priority / in
+"          front.  An "*" pattern handles the default priority.
+fun! s:NetrwSetSort()
+"  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
+  if w:netrw_liststyle == s:LONGLIST
+   let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
+  else
+   let seqlist  = g:netrw_sort_sequence
+  endif
+  " sanity check -- insure that * appears somewhere
+  if seqlist == ""
+   let seqlist= '*'
+  elseif seqlist !~ '\*'
+   let seqlist= seqlist.',*'
+  endif
+  let priority = 1
+  while seqlist != ""
+   if seqlist =~ ','
+    let seq     = substitute(seqlist,',.*$','','e')
+    let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e')
+   else
+    let seq     = seqlist
+    let seqlist = ""
+   endif
+   let sepchr= "\<Char-0xff>"
+   if priority < 10
+    let spriority= "00".priority.sepchr
+   elseif priority < 100
+    let spriority= "0".priority.sepchr
+   else
+    let spriority= priority.sepchr
+   endif
+"   call Decho("priority=".priority." spriority<".spriority."> seq<".seq."> seqlist<".seqlist.">")
+
+   " sanity check
+   if w:netrw_bannercnt > line("$")
+    " apparently no files were left after a Hiding pattern was used
+"    call Dret("SetSort : no files left after hiding")
+    return
+   endif
+   if seq == '*'
+    let starpriority= spriority
+   else
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/'.seq.'/s/^/'.spriority.'/'
+    " sometimes multiple sorting patterns will match the same file or directory.
+    " The following substitute is intended to remove the excess matches.
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^\d\{3}'.sepchr.'\d\{3}\//s/^\d\{3}'.sepchr.'\(\d\{3}\/\).\@=/\1/e'
+   endif
+   let priority = priority + 1
+  endwhile
+  if exists("starpriority")
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$v/^\d\{3}'.sepchr.'/s/^/'.starpriority.'/'
+  endif
+
+  " Following line associated with priority -- items that satisfy a priority
+  " pattern get prefixed by ###/ which permits easy sorting by priority.
+  " Sometimes files can satisfy multiple priority patterns -- only the latest
+  " priority pattern needs to be retained.  So, at this point, these excess
+  " priority prefixes need to be removed, but not directories that happen to
+  " be just digits themselves.
+  exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{3}'.sepchr.'\)\%(\d\{3}'.sepchr.'\)\+\ze./\1/e'
+
+"  call Dret("SetSort")
+endfun
+
+" =====================================================================
+" s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2
+fun! s:NetrwSortStyle(islocal)
+"  call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">")
+  call s:NetrwSaveWordPosn()
+  let svpos= netrw#NetrwSavePosn()
+
+  let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'
+  norm! 0
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+
+"  call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwSplit: mode {{{2
+"           =0 : net   and o
+"           =1 : net   and t
+"           =2 : net   and v
+"           =3 : local and o
+"           =4 : local and t
+"           =5 : local and v
+fun! s:NetrwSplit(mode)
+"  call Dfunc("s:NetrwSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
+
+  call s:SaveWinVars()
+
+  if a:mode == 0
+   " remote and o
+"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   unlet s:didsplit
+
+  elseif a:mode == 1
+   " remote and t
+   let cursorword  = s:NetrwGetWord()
+"   call Decho("tabnew")
+   tabnew
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,cursorword))
+   unlet s:didsplit
+
+  elseif a:mode == 2
+   " remote and v
+"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   unlet s:didsplit
+
+  elseif a:mode == 3
+   " local and o
+"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
+   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+   unlet s:didsplit
+
+  elseif a:mode == 4
+   " local and t
+   let netrw_curdir= b:netrw_curdir
+   let cursorword  = s:NetrwGetWord()
+"   call Decho("tabnew")
+   tabnew
+   let b:netrw_curdir= netrw_curdir
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
+   unlet s:didsplit
+
+  elseif a:mode == 5
+   " local and v
+"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
+   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let s:didsplit= 1
+   call s:RestoreWinVars()
+   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+   unlet s:didsplit
+
+  else
+   call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
+  endif
+
+"  call Dret("s:NetrwSplit")
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwStatusLine: {{{2
+fun! NetrwStatusLine()
+
+" vvv NetrwStatusLine() debugging vvv
+"  let g:stlmsg=""
+"  if !exists("w:netrw_explore_bufnr")
+"   let g:stlmsg="!X<explore_bufnr>"
+"  elseif w:netrw_explore_bufnr != bufnr("%")
+"   let g:stlmsg="explore_bufnr!=".bufnr("%")
+"  endif
+"  if !exists("w:netrw_explore_line")
+"   let g:stlmsg=" !X<explore_line>"
+"  elseif w:netrw_explore_line != line(".")
+"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
+"  endif
+"  if !exists("w:netrw_explore_list")
+"   let g:stlmsg=" !X<explore_list>"
+"  endif
+" ^^^ NetrwStatusLine() debugging ^^^
+
+  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
+   " restore user's status line
+   let &stl        = s:netrw_users_stl
+   let &laststatus = s:netrw_users_ls
+   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
+   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
+   return ""
+  else
+   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+  endif
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwTreeDir: determine tree directory given current cursor position {{{2
+" (full path directory with trailing slash returned)
+fun! s:NetrwTreeDir()
+"  call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">")
+
+  let treedir= b:netrw_curdir
+"  call Decho("set initial treedir<".treedir.">")
+  let s:treecurpos= netrw#NetrwSavePosn()
+
+  if w:netrw_liststyle == s:TREELIST
+"   call Decho("w:netrrw_liststyle is TREELIST:")
+"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
+   if getline('.') =~ '/$'
+    let treedir= substitute(getline('.'),'^\%(| \)*\([^|].\{-}\)$','\1','e')
+   else
+    let treedir= ""
+   endif
+
+"   call Decho("treedir<".treedir.">")
+
+   " detect user attempting to close treeroot
+   if getline('.') !~ '|' && getline('.') != '..'
+"    call Decho("user attempted to close treeroot")
+    " now force a refresh
+"    call Decho("clear buffer<".expand("%")."> with :%d")
+    keepjumps %d
+"    call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
+    return b:netrw_curdir
+   endif
+
+   " elide all non-depth information
+   let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
+"   call Decho("depth<".depth."> 1st subst")
+
+   " elide first depth
+   let depth = substitute(depth,'^| ','','')
+"   call Decho("depth<".depth."> 2nd subst")
+
+   " construct treedir by searching backwards at correct depth
+"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
+   while depth != "" && search('^'.depth.'[^|].\{-}/$','bW')
+    let dirname= substitute(getline('.'),'^\(| \)*','','e')
+    let treedir= dirname.treedir
+    let depth  = substitute(depth,'^| ','','')
+"    call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
+   endwhile
+   if w:netrw_treetop =~ '/$'
+    let treedir= w:netrw_treetop.treedir
+   else
+    let treedir= w:netrw_treetop.'/'.treedir
+   endif
+"   call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
+  endif
+  let treedir= substitute(treedir,'//$','/','')
+
+"  " now force a refresh
+"" call DECHO("clear buffer<".expand("%")."> with :%d")
+"  setlocal ma noro
+"  keepjumps %d
+
+"  call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
+  return treedir
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwTreeDisplay: recursive tree display {{{2
+fun! s:NetrwTreeDisplay(dir,depth)
+"  call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)")
+
+  " insure that there are no folds
+  setlocal nofen
+
+  " install ../ and shortdir
+  if a:depth == ""
+   call setline(line("$")+1,'../')
+"   call Decho("setline#".line("$")." ../ (depth is zero)")
+  endif
+  if a:dir =~ '^\a\+://'
+   if a:dir == w:netrw_treetop
+    let shortdir= a:dir
+   else
+    let shortdir= substitute(a:dir,'^.*/\([^/]\+\)/$','\1/','e')
+   endif
+   call setline(line("$")+1,a:depth.shortdir)
+  else
+   let shortdir= substitute(a:dir,'^.*/','','e')
+   call setline(line("$")+1,a:depth.shortdir.'/')
+  endif
+"  call Decho("setline#".line("$")." shortdir<".a:depth.shortdir.">")
+
+  " append a / to dir if its missing one
+  let dir= a:dir
+  if dir !~ '/$'
+   let dir= dir.'/'
+  endif
+
+  " display subtrees (if any)
+  let depth= "| ".a:depth
+
+"  call Decho("display subtrees with depth<".depth."> and current leaves")
+  for entry in w:netrw_treedict[a:dir]
+   let direntry= substitute(dir.entry,'/$','','e')
+"   call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">")
+   if entry =~ '/$' && has_key(w:netrw_treedict,direntry)
+"    call Decho("<".direntry."> is a key in treedict - display subtree for it")
+    call s:NetrwTreeDisplay(direntry,depth)
+   elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/')
+"    call Decho("<".direntry."/> is a key in treedict - display subtree for it")
+    call s:NetrwTreeDisplay(direntry.'/',depth)
+   else
+"    call Decho("<".entry."> is not a key in treedict (no subtree)")
+    call setline(line("$")+1,depth.entry)
+   endif
+  endfor
+"  call Dret("NetrwTreeDisplay")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwTreeListing: displays tree listing from treetop on down, using NetrwTreeDisplay() {{{2
+fun! s:NetrwTreeListing(dirname)
+  if w:netrw_liststyle == s:TREELIST
+"   call Dfunc("NetrwTreeListing() bufname<".expand("%").">")
+"   call Decho("curdir<".a:dirname.">")
+"   call Decho("win#".winnr().": w:netrw_treetop ".(exists("w:netrw_treetop")? "exists" : "doesn't exit")." w:netrw_treedict ".(exists("w:netrw_treedict")? "exists" : "doesn't exit"))
+
+   " update the treetop
+"   call Decho("update the treetop")
+   if !exists("w:netrw_treetop")
+    let w:netrw_treetop= a:dirname
+"    call Decho("w:netrw_treetop<".w:netrw_treetop."> (reusing)")
+   elseif (w:netrw_treetop =~ ('^'.a:dirname) && s:Strlen(a:dirname) < s:Strlen(w:netrw_treetop)) || a:dirname !~ ('^'.w:netrw_treetop)
+    let w:netrw_treetop= a:dirname
+"    call Decho("w:netrw_treetop<".w:netrw_treetop."> (went up)")
+   endif
+
+   " insure that we have at least an empty treedict
+   if !exists("w:netrw_treedict")
+    let w:netrw_treedict= {}
+   endif
+
+   " update the directory listing for the current directory
+"   call Decho("updating dictionary with ".a:dirname.":[..directory listing..]")
+"   call Decho("bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
+   exe "silent! keepjumps ".w:netrw_bannercnt.',$g@^\.\.\=/$@d'
+   let w:netrw_treedict[a:dirname]= getline(w:netrw_bannercnt,line("$"))
+"   call Decho("w:treedict[".a:dirname."]= ".w:netrw_treedict[a:dirname])
+   exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
+
+   " if past banner, record word
+   if exists("w:netrw_bannercnt") && line(".") > w:netrw_bannercnt
+    let fname= expand("<cword>")
+   else
+    let fname= ""
+   endif
+"   call Decho("fname<".fname.">")
+
+   " display from treetop on down
+   call s:NetrwTreeDisplay(w:netrw_treetop,"")
+
+"   call Dret("NetrwTreeListing : bufname<".expand("%").">")
+  endif
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwWideListing: {{{2
+fun! s:NetrwWideListing()
+
+  if w:netrw_liststyle == s:WIDELIST
+"   call Dfunc("NetrwWideListing() w:netrw_liststyle=".w:netrw_liststyle.' fo='.&fo.' l:fo='.&l:fo)
+   " look for longest filename (cpf=characters per filename)
+   " cpf: characters per file
+   " fpl: files per line
+   " fpc: files per column
+   setlocal ma noro
+"   call Decho("setlocal ma noro")
+   let b:netrw_cpf= 0
+   if line("$") >= w:netrw_bannercnt
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+   else
+"    call Dret("NetrwWideListing")
+    return
+   endif
+"   call Decho("max file strlen+1=".b:netrw_cpf)
+   let b:netrw_cpf= b:netrw_cpf + 1
+
+   " determine qty files per line (fpl)
+   let w:netrw_fpl= winwidth(0)/b:netrw_cpf
+   if w:netrw_fpl <= 0
+    let w:netrw_fpl= 1
+   endif
+"   call Decho("fpl= ".winwidth(0)."/[b:netrw_cpf=".b:netrw_cpf.']='.w:netrw_fpl)
+
+   " make wide display
+   exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
+   let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
+   let newcolstart = w:netrw_bannercnt + fpc
+   let newcolend   = newcolstart + fpc - 1
+"   call Decho("bannercnt=".w:netrw_bannercnt." fpl=".w:netrw_fpl." fpc=".fpc." newcol[".newcolstart.",".newcolend."]")
+   silent! let keepregstar = @*
+   while line("$") >= newcolstart
+    if newcolend > line("$") | let newcolend= line("$") | endif
+    let newcolqty= newcolend - newcolstart
+    exe newcolstart
+    if newcolqty == 0
+     exe "silent keepjumps norm! 0\<c-v>$hx".w:netrw_bannercnt."G$p"
+    else
+     exe "silent keepjumps norm! 0\<c-v>".newcolqty.'j$hx'.w:netrw_bannercnt.'G$p'
+    endif
+    exe "silent keepjumps ".newcolstart.','.newcolend.'d'
+    exe 'silent keepjumps '.w:netrw_bannercnt
+   endwhile
+   silent! let @*= keepregstar
+   exe "silent keepjumps ".w:netrw_bannercnt.',$s/\s\+$//e'
+   setlocal noma nomod ro
+"   call Dret("NetrwWideListing")
+  endif
+
+endfun
+
+" ---------------------------------------------------------------------
+" s:PerformListing: {{{2
+fun! s:PerformListing(islocal)
+"  call Dfunc("s:PerformListing(islocal=".a:islocal.") buf(%)=".bufnr("%")."<".bufname("%").">")
+
+  call s:NetrwSafeOptions()
+  setlocal noro ma
+"  call Decho("setlocal noro ma")
+
+"  if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1	" Decho
+"   call Decho("(netrw) Processing your browsing request...")
+"  endif								" Decho
+
+"  call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'))
+  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+   " force a refresh for tree listings
+"   call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
+   keepjumps %d
+  endif
+
+  " save current directory on directory history list
+  call s:NetrwBookmarkDir(3,b:netrw_curdir)
+
+  " Set up the banner {{{3
+"  call Decho("set up banner")
+  keepjumps put ='\" ============================================================================'
+  keepjumps put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
+  keepjumps put ='\"   '.b:netrw_curdir
+  keepjumps 1d
+  let w:netrw_bannercnt= 3
+  exe "keepjumps ".w:netrw_bannercnt
+
+  let sortby= g:netrw_sort_by
+  if g:netrw_sort_direction =~ "^r"
+   let sortby= sortby." reversed"
+  endif
+
+  " Sorted by... {{{3
+"  call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
+  if g:netrw_sort_by =~ "^n"
+"   call Decho("directories will be sorted by name")
+   " sorted by name
+   keepjumps put ='\"   Sorted by      '.sortby
+   keepjumps put ='\"   Sort sequence: '.g:netrw_sort_sequence
+   let w:netrw_bannercnt= w:netrw_bannercnt + 2
+  else
+"   call Decho("directories will be sorted by size or time")
+   " sorted by size or date
+   keepjumps put ='\"   Sorted by '.sortby
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
+  endif
+  exe "keepjumps ".w:netrw_bannercnt
+
+  " show copy/move target, if any
+  if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal")
+"   call Decho("show copy/move target<".s:netrwmftgt.">")
+   keepjumps put =''
+   if s:netrwmftgt_islocal
+    call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
+   else
+    call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (remote)')
+   endif
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
+  else
+"   call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
+  endif
+  exe "keepjumps ".w:netrw_bannercnt
+
+  " Hiding...  -or-  Showing... {{{3
+"  call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
+  if g:netrw_list_hide != "" && g:netrw_hide
+   if g:netrw_hide == 1
+    keepjumps put ='\"   Hiding:        '.g:netrw_list_hide
+   else
+    keepjumps put ='\"   Showing:       '.g:netrw_list_hide
+   endif
+   let w:netrw_bannercnt= w:netrw_bannercnt + 1
+  endif
+  exe "keepjumps ".w:netrw_bannercnt
+  keepjumps put ='\"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec'
+  keepjumps put ='\" ============================================================================'
+  let w:netrw_bannercnt= w:netrw_bannercnt + 2
+
+  " bannercnt should index the line just after the banner
+  let w:netrw_bannercnt= w:netrw_bannercnt + 1
+  exe "keepjumps ".w:netrw_bannercnt
+"  call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
+
+  " set up syntax highlighting {{{3
+"  call Decho("set up syntax highlighting")
+  if has("syntax")
+   setlocal ft=netrw
+   if !exists("g:syntax_on") || !g:syntax_on
+    setlocal ft=
+   endif
+  endif
+
+  " get list of files
+"  call Decho("Get list of files - islocal=".a:islocal)
+  if a:islocal
+   call s:LocalListing()
+  else " remote
+   call s:NetrwRemoteListing()
+  endif
+"  call Decho("w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
+
+  " manipulate the directory listing (hide, sort) {{{3
+  if line("$") >= w:netrw_bannercnt
+"   call Decho("manipulate directory listing (hide)")
+"   call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+   if g:netrw_hide && g:netrw_list_hide != ""
+    call s:NetrwListHide()
+   endif
+   if line("$") >= w:netrw_bannercnt
+"    call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
+
+    if g:netrw_sort_by =~ "^n"
+     " sort by name
+     call s:NetrwSetSort()
+
+     if w:netrw_bannercnt < line("$")
+"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
+      if g:netrw_sort_direction =~ 'n'
+       " normal direction sorting
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
+      else
+       " reverse direction sorting
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
+      endif
+     endif
+     " remove priority pattern prefix
+"     call Decho("remove priority pattern prefix")
+     let sepchr= "\<Char-0xff>"
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{3}'.sepchr.'//e'
+
+    elseif a:islocal
+     if w:netrw_bannercnt < line("$")
+"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
+      if g:netrw_sort_direction =~ 'n'
+"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
+      else
+"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
+       exe 'silent keepjumps '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
+      endif
+     endif
+     exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+    endif
+
+   elseif g:netrw_sort_direction =~ 'r'
+"    call Decho('reverse the sorted listing')
+    exe 'silent keepjumps '.w:netrw_bannercnt.'g/^/m '.w:netrw_bannercnt
+   endif
+  endif
+
+  " convert to wide/tree listing {{{3
+"  call Decho("modify display if wide/tree listing style")
+  call s:NetrwWideListing()
+  call s:NetrwTreeListing(b:netrw_curdir)
+
+  if exists("w:netrw_bannercnt") && line("$") > w:netrw_bannercnt
+   " place cursor on the top-left corner of the file listing
+"   call Decho("place cursor on top-left corner of file listing")
+   exe 'silent keepjumps '.w:netrw_bannercnt
+   norm! 0
+  endif
+
+  " record previous current directory
+  let w:netrw_prvdir= b:netrw_curdir
+"  call Decho("record netrw_prvdir<".w:netrw_prvdir.">")
+
+  " save certain window-oriented variables into buffer-oriented variables {{{3
+  call s:SetBufWinVars()
+  call s:NetrwOptionRestore("w:")
+
+  " set display to netrw display settings
+"  call Decho("set display to netrw display settings (noma nomod etc)")
+  setlocal noma nomod nonu nobl nowrap ro
+  if exists("s:treecurpos")
+
+   call netrw#NetrwRestorePosn(s:treecurpos)
+   unlet s:treecurpos
+  endif
+
+"  call Dret("s:PerformListing : curpos<".string(getpos(".")).">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SetupNetrwStatusLine: {{{2
+fun! s:SetupNetrwStatusLine(statline)
+"  call Dfunc("SetupNetrwStatusLine(statline<".a:statline.">)")
+
+  if !exists("s:netrw_setup_statline")
+   let s:netrw_setup_statline= 1
+"   call Decho("do first-time status line setup")
+
+   if !exists("s:netrw_users_stl")
+    let s:netrw_users_stl= &stl
+   endif
+   if !exists("s:netrw_users_ls")
+    let s:netrw_users_ls= &laststatus
+   endif
+
+   " set up User9 highlighting as needed
+   let keepa= @a
+   redir @a
+   try
+    hi User9
+   catch /^Vim\%((\a\+)\)\=:E411/
+    if &bg == "dark"
+     hi User9 ctermfg=yellow ctermbg=blue guifg=yellow guibg=blue
+    else
+     hi User9 ctermbg=yellow ctermfg=blue guibg=yellow guifg=blue
+    endif
+   endtry
+   redir END
+   let @a= keepa
+  endif
+
+  " set up status line (may use User9 highlighting)
+  " insure that windows have a statusline
+  " make sure statusline is displayed
+  let &stl=a:statline
+  setlocal laststatus=2
+"  call Decho("stl=".&stl)
+  redraw
+
+"  call Dret("SetupNetrwStatusLine : stl=".&stl)
+endfun
+
+" ---------------------------------------------------------------------
+"  Remote Directory Browsing Support:    {{{1
+" ===========================================
+
+" ---------------------------------------------------------------------
+" s:NetrwRemoteListing: {{{2
+fun! s:NetrwRemoteListing()
+"  call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)")
+
+  call s:RemotePathAnalysis(b:netrw_curdir)
+
+  " sanity check:
+  if exists("b:netrw_method") && b:netrw_method =~ '[235]'
+"   call Decho("b:netrw_method=".b:netrw_method)
+   if !executable("ftp")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18)
+    endif
+    call s:NetrwOptionRestore("w:")
+"    call Dret("s:NetrwRemoteListing")
+    return
+   endif
+
+  elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
+   if !exists("g:netrw_quiet")
+    if g:netrw_list_cmd == ""
+     call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47)
+    else
+     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
+    endif
+   endif
+
+   call s:NetrwOptionRestore("w:")
+"   call Dret("s:NetrwRemoteListing")
+   return
+  endif  " (remote handling sanity check)
+
+  if exists("b:netrw_method")
+"   call Decho("setting w:netrw_method<".b:netrw_method.">")
+   let w:netrw_method= b:netrw_method
+  endif
+
+  if s:method == "ftp"
+   " use ftp to get remote file listing
+"   call Decho("use ftp to get remote file listing")
+   let s:method  = "ftp"
+   let listcmd = g:netrw_ftp_list_cmd
+   if g:netrw_sort_by =~ '^t'
+    let listcmd= g:netrw_ftp_timelist_cmd
+   elseif g:netrw_sort_by =~ '^s'
+    let listcmd= g:netrw_ftp_sizelist_cmd
+   endif
+"   call Decho("listcmd<".listcmd."> (using g:netrw_ftp_list_cmd)")
+   call s:NetrwRemoteFtpCmd(s:path,listcmd)
+"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("raw listing: ".getline("."))'
+
+   if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
+    " shorten the listing
+"    call Decho("generate short listing")
+    exe "keepjumps ".w:netrw_bannercnt
+
+    " cleanup
+    if g:netrw_ftp_browse_reject != ""
+     exe "silent! g/".g:netrw_ftp_browse_reject."/keepjumps d"
+    endif
+    silent! keepjumps %s/\r$//e
+
+    " if there's no ../ listed, then put ./ and ../ in
+    let line1= line(".")
+    exe "keepjumps ".w:netrw_bannercnt
+    let line2= search('^\.\.\/\%(\s\|$\)','cnW')
+    if line2 == 0
+"     call Decho("netrw is putting ./ and ../ into listing")
+     keepjumps put='../'
+     keepjumps put='./'
+    endif
+    exe "keepjumps ".line1
+    keepjumps norm! 0
+
+"    call Decho("line1=".line1." line2=".line2." line(.)=".line("."))
+    if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
+"     call Decho("M$ ftp cleanup")
+     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
+    else " normal ftp cleanup
+"     call Decho("normal ftp cleanup")
+     exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
+     exe "silent! keepjumps ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
+    endif
+   endif
+
+  else
+   " use ssh to get remote file listing {{{3
+"   call Decho("use ssh to get remote file listing: s:path<".s:path.">")
+   let listcmd= s:MakeSshCmd(g:netrw_list_cmd)
+"   call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)")
+   if g:netrw_scp_cmd =~ '^pscp'
+"    call Decho("1: exe silent r! ".shellescape(listcmd.s:path, 1))
+    exe "silent r! ".listcmd.shellescape(s:path, 1)
+    " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
+    g/^Listing directory/d
+    g/^d[-rwx][-rwx][-rwx]/s+$+/+e
+    silent g/^l[-rwx][-rwx][-rwx]/s+$+@+e
+    if g:netrw_liststyle != s:LONGLIST
+     g/^[dlsp-][-rwx][-rwx][-rwx]/s/^.*\s\(\S\+\)$/\1/e
+    endif
+   else
+    if s:path == ""
+"     call Decho("2: exe silent r! ".listcmd)
+     exe "silent r! ".listcmd
+    else
+"     call Decho("3: exe silent r! ".listcmd.' '.shellescape(s:path,1))
+     exe "silent r! ".listcmd.' '.shellescape(s:path,1)
+"     call Decho("listcmd<".listcmd."> path<".s:path.">")
+    endif
+   endif
+
+   " cleanup
+   if g:netrw_ftp_browse_reject != ""
+"    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
+    exe "silent! g/".g:netrw_ssh_browse_reject."/keepjumps d"
+   endif
+  endif
+
+  if w:netrw_liststyle == s:LONGLIST
+   " do a long listing; these substitutions need to be done prior to sorting {{{3
+"   call Decho("fix long listing:")
+
+   if s:method == "ftp"
+    " cleanup
+    exe "keepjumps ".w:netrw_bannercnt
+    while getline('.') =~ g:netrw_ftp_browse_reject
+     keepjumps d
+    endwhile
+    " if there's no ../ listed, then put ./ and ../ in
+    let line1= line(".")
+    keepjumps 1
+    silent keepjumps call search('^\.\.\/\%(\s\|$\)','W')
+    let line2= line(".")
+    if line2 == 0
+     exe 'keepjumps '.w:netrw_bannercnt."put='./'"
+     if b:netrw_curdir != '/'
+      exe 'keepjumps '.w:netrw_bannercnt."put='../'"
+     endif
+    endif
+   exe "keepjumps ".line1
+   keepjumps norm! 0
+   endif
+
+   if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
+"    call Decho("M$ ftp site listing cleanup")
+    exe 'silent! keepjumps '.w:netrw_bannercnt.',$s/^\(\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+\)\(\w.*\)$/\2\t\1/'
+   elseif exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$")
+"    call Decho("normal ftp site listing cleanup: bannercnt=".w:netrw_bannercnt." line($)=".line("$"))
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/ -> .*$//e'
+    exe 'silent keepjumps '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+    exe 'silent keepjumps '.w:netrw_bannercnt
+   endif
+  endif
+
+"  if exists("w:netrw_bannercnt") && w:netrw_bannercnt <= line("$") " Decho
+"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("listing: ".getline("."))'
+"  endif " Decho
+"  call Dret("s:NetrwRemoteListing")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRemoteRm: remove/delete a remote file or directory {{{2
+fun! s:NetrwRemoteRm(usrhost,path) range
+"  call Dfunc("s:NetrwRemoteRm(usrhost<".a:usrhost."> path<".a:path.">) virtcol=".virtcol("."))
+"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
+  let svpos= netrw#NetrwSavePosn()
+
+  let all= 0
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   " remove all marked files
+"   call Decho("remove all marked files with bufnr#".bufnr("%"))
+   for fname in s:netrwmarkfilelist_{bufnr("%")}
+    let ok= s:NetrwRemoteRmFile(a:path,fname,all)
+    if ok =~ 'q\%[uit]'
+     break
+    elseif ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endfor
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+
+  else
+   " remove files specified by range
+"   call Decho("remove files specified by range")
+
+   " preparation for removing multiple files/directories
+   let ctr= a:firstline
+
+   " remove multiple files and directories
+   while ctr <= a:lastline
+    exe ctr
+    let ok= s:NetrwRemoteRmFile(a:path,s:NetrwGetWord(),all)
+    if ok =~ 'q\%[uit]'
+     break
+    elseif ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+    let ctr= ctr + 1
+   endwhile
+  endif
+
+  " refresh the (remote) directory listing
+"  call Decho("refresh remote directory listing")
+  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+
+"  call Dret("s:NetrwRemoteRm")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRemoteRmFile: {{{2
+fun! s:NetrwRemoteRmFile(path,rmfile,all)
+"  call Dfunc("s:NetrwRemoteRmFile(path<".a:path."> rmfile<".a:rmfile.">) all=".a:all)
+
+  let all= a:all
+  let ok = ""
+
+  if a:rmfile !~ '^"' && (a:rmfile =~ '@$' || a:rmfile !~ '[\/]$')
+   " attempt to remove file
+"    call Decho("attempt to remove file (all=".all.")")
+   if !all
+    echohl Statement
+"    call Decho("case all=0:")
+    call inputsave()
+    let ok= input("Confirm deletion of file<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+    call inputrestore()
+    echohl NONE
+    if ok == ""
+     let ok="no"
+    endif
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+    if ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endif
+
+   if all || ok =~ 'y\%[es]' || ok == ""
+"    call Decho("case all=".all." or ok<".ok.">".(exists("w:netrw_method")? ': netrw_method='.w:netrw_method : ""))
+    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+"     call Decho("case ftp:")
+     let path= a:path
+     if path =~ '^\a\+://'
+      let path= substitute(path,'^\a\+://[^/]\+/','','')
+     endif
+     silent! keepjumps .,$d
+     call s:NetrwRemoteFtpCmd(path,"delete ".'"'.a:rmfile.'"')
+    else
+"     call Decho("case ssh: g:netrw_rm_cmd<".g:netrw_rm_cmd.">")
+     let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd)
+"     call Decho("netrw_rm_cmd<".netrw_rm_cmd.">")
+     if !exists("b:netrw_curdir")
+      call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+      let ok="q"
+     else
+      let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
+"      call Decho("netrw_rm_cmd<".netrw_rm_cmd.">")
+"      call Decho("remotedir<".remotedir.">")
+"      call Decho("rmfile<".a:rmfile.">")
+      if remotedir != ""
+       let netrw_rm_cmd= netrw_rm_cmd." ".shellescape(fnameescape(remotedir.a:rmfile))
+      else
+       let netrw_rm_cmd= netrw_rm_cmd." ".shellescape(fnameescape(a:rmfile))
+      endif
+"      call Decho("call system(".netrw_rm_cmd.")")
+      let ret= system(netrw_rm_cmd)
+      if ret != 0
+       call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
+      endif
+"      call Decho("returned=".ret." errcode=".v:shell_error)
+     endif
+    endif
+   elseif ok =~ 'q\%[uit]'
+"    call Decho("ok==".ok)
+    break
+   endif
+
+  else
+   " attempt to remove directory
+"    call Decho("attempt to remove directory")
+   if !all
+    call inputsave()
+    let ok= input("Confirm deletion of directory<".a:rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+    call inputrestore()
+    if ok == ""
+     let ok="no"
+    endif
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+    if ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endif
+
+   if all || ok =~ 'y\%[es]' || ok == ""
+    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+     call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
+    else
+     let rmfile          = substitute(a:path.a:rmfile,'/$','','')
+     let netrw_rmdir_cmd = s:MakeSshCmd(s:WinPath(g:netrw_rmdir_cmd)).' '.shellescape(s:WinPath(rmfile))
+"      call Decho("attempt to remove dir: system(".netrw_rmdir_cmd.")")
+     let ret= system(netrw_rmdir_cmd)
+"      call Decho("returned=".ret." errcode=".v:shell_error)
+
+     if v:shell_error != 0
+"      call Decho("v:shell_error not 0")
+      let netrw_rmf_cmd= s:MakeSshCmd(s:WinPath(g:netrw_rmf_cmd)).' '.shellescape(s:WinPath(substitute(rmfile,'[\/]$','','e')))
+"      call Decho("2nd attempt to remove dir: system(".netrw_rmf_cmd.")")
+      let ret= system(netrw_rmf_cmd)
+"      call Decho("returned=".ret." errcode=".v:shell_error)
+
+      if v:shell_error != 0 && !exists("g:netrw_quiet")
+      	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
+      endif
+     endif
+    endif
+
+   elseif ok =~ 'q\%[uit]'
+    break
+   endif
+  endif
+
+"  call Dret("s:NetrwRemoteRmFile ".ok)
+  return ok
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRemoteFtpCmd: unfortunately, not all ftp servers honor options for ls {{{2
+"  This function assumes that a long listing will be received.  Size, time,
+"  and reverse sorts will be requested of the server but not otherwise
+"  enforced here.
+fun! s:NetrwRemoteFtpCmd(path,listcmd)
+"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
+"  call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt)
+
+  " because WinXX ftp uses unix style input
+  let ffkeep= &ff
+  setlocal ma ff=unix noro
+"  call Decho("setlocal ma ff=unix noro")
+
+  " clear off any older non-banner lines
+  " note that w:netrw_bannercnt indexes the line after the banner
+"  call Decho('exe silent! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
+  exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
+
+  ".........................................
+  if w:netrw_method == 2 || w:netrw_method == 5
+   " ftp + <.netrc>:  Method #2
+   if a:path != ""
+    put ='cd \"'.a:path.'\"'
+   endif
+   if exists("g:netrw_ftpextracmd")
+    put =g:netrw_ftpextracmd
+"    call Decho("filter input: ".getline('.'))
+   endif
+   call setline(line("$")+1,a:listcmd)
+"   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
+   if exists("g:netrw_port") && g:netrw_port != ""
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+   else
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+   endif
+
+   ".........................................
+  elseif w:netrw_method == 3
+   " ftp + machine,id,passwd,filename:  Method #3
+    setlocal ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     put ='open '.g:netrw_machine
+    endif
+
+    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+     put =g:netrw_uid
+     put ='\"'.s:netrw_passwd.'\"'
+    else
+     put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+    endif
+
+   if a:path != ""
+    put ='cd \"'.a:path.'\"'
+   endif
+   if exists("g:netrw_ftpextracmd")
+    put =g:netrw_ftpextracmd
+"    call Decho("filter input: ".getline('.'))
+   endif
+   call setline(line("$")+1,a:listcmd)
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+"    exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n")
+    exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n"
+
+   ".........................................
+  else
+   call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
+  endif
+
+  " cleanup for Windows
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   silent! keepjumps %s/\r$//e
+  endif
+  if a:listcmd == "dir"
+   " infer directory/link based on the file permission string
+   silent! keepjumps g/d\%([-r][-w][-x]\)\{3}/s@$@/@
+   silent! keepjumps g/l\%([-r][-w][-x]\)\{3}/s/$/@/
+   if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
+    exe "silent! keepjumps ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
+   endif
+  endif
+
+  " ftp's listing doesn't seem to include ./ or ../
+  if !search('^\.\/$\|\s\.\/$','wn')
+   exe 'keepjumps '.w:netrw_bannercnt
+   put ='./'
+  endif
+  if !search('^\.\.\/$\|\s\.\.\/$','wn')
+   exe 'keepjumps '.w:netrw_bannercnt
+   put ='../'
+  endif
+
+  " restore settings
+  let &ff= ffkeep
+"  call Dret("NetrwRemoteFtpCmd")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRemoteRename: rename a remote file or directory {{{2
+fun! s:NetrwRemoteRename(usrhost,path) range
+"  call Dfunc("NetrwRemoteRename(usrhost<".a:usrhost."> path<".a:path.">)")
+
+  " preparation for removing multiple files/directories
+  let svpos      = netrw#NetrwSavePosn()
+  let ctr        = a:firstline
+  let rename_cmd = s:MakeSshCmd(g:netrw_rename_cmd)
+
+  " rename files given by the markfilelist
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   for oldname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("oldname<".oldname.">")
+    if exists("subfrom")
+     let newname= substitute(oldname,subfrom,subto,'')
+"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+    else
+     call inputsave()
+     let newname= input("Moving ".oldname." to : ",oldname)
+     call inputrestore()
+     if newname =~ '^s/'
+      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
+      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
+      let newname = substitute(oldname,subfrom,subto,'')
+"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+     endif
+    endif
+   
+    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+     call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
+    else
+     let oldname= shellescape(a:path.oldname)
+     let newname= shellescape(a:path.newname)
+"     call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")")
+     let ret    = system(s:WinPath(rename_cmd).' '.oldname.' '.newname)
+    endif
+
+   endfor
+   call s:NetrwUnMarkFile(1)
+
+  else
+
+  " attempt to rename files/directories
+   while ctr <= a:lastline
+    exe "keepjumps ".ctr
+
+    let oldname= s:NetrwGetWord()
+"   call Decho("oldname<".oldname.">")
+
+    call inputsave()
+    let newname= input("Moving ".oldname." to : ",oldname)
+    call inputrestore()
+
+    if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+     call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
+    else
+     let oldname= shellescape(a:path.oldname)
+     let newname= shellescape(a:path.newname)
+"     call Decho("system(s:WinPath(".rename_cmd.") ".oldname.' '.newname.")")
+     let ret    = system(s:WinPath(rename_cmd).' '.oldname.' '.newname)
+    endif
+
+    let ctr= ctr + 1
+   endwhile
+  endif
+
+  " refresh the directory
+  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+
+"  call Dret("NetrwRemoteRename")
+endfun
+
+" ---------------------------------------------------------------------
+"  Local Directory Browsing Support:    {{{1
+" ==========================================
+
+" ---------------------------------------------------------------------
+" netrw#LocalBrowseCheck: {{{2
+fun! netrw#LocalBrowseCheck(dirname)
+  " unfortunate interaction -- split window debugging can't be
+  " used here, must use D-echoRemOn or D-echoTabOn -- the BufEnter
+  " event triggers another call to LocalBrowseCheck() when attempts
+  " to write to the DBG buffer are made.
+  " The &ft == "netrw" test was installed because the BufEnter event
+  " would hit when re-entering netrw windows, creating unexpected
+  " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
+"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname))
+  if isdirectory(a:dirname)
+"   call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$"))
+   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname)
+    silent! call s:NetrwBrowse(1,a:dirname)
+   elseif &ft == "netrw" && line("$") == 1
+    silent! call s:NetrwBrowse(1,a:dirname)
+   endif
+  endif
+  " not a directory, ignore it
+endfun
+
+" ---------------------------------------------------------------------
+"  s:LocalListing: does the job of "ls" for local directories {{{2
+fun! s:LocalListing()
+"  call Dfunc("s:LocalListing()")
+"  call Decho("&ma=".&ma)
+"  call Decho("&mod=".&mod)
+"  call Decho("&ro=".&ro)
+"  call Decho("bufname(%)<".bufname("%").">")
+
+"  if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("b:netrw_curdir doesn't exist") |endif
+"  if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
+
+  " get the list of files contained in the current directory
+  let dirname    = escape(b:netrw_curdir,g:netrw_glob_escape)
+  let dirnamelen = strlen(b:netrw_curdir)
+  let filelist   = glob(s:ComposePath(dirname,"*"))
+"  call Decho("glob(dirname<".dirname."/*>)=".filelist)
+  if filelist != ""
+   let filelist= filelist."\n"
+  endif
+  let filelist= filelist.glob(s:ComposePath(dirname,".*"))
+"  call Decho("glob(dirname<".dirname."/.*>)=".filelist)
+
+  " Coding choice: either   elide   ./ if present
+  "                or       include ./ if not present
+  if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)'
+   " elide /path/. from glob() entries if present
+"   call Decho("elide /path/. from glob entries if present")
+   let filelist = substitute(filelist,'\n','\t','g')
+   let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','')
+   let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','')
+   let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','')
+   let filelist = substitute(filelist,'\t','\n','g')
+  endif
+"  call Decho("filelist<".filelist.">")
+  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
+    " include ../ in the glob() entry if its missing
+"   call Decho("forcibly tacking on ..")
+   let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
+"   call Decho("filelist<".filelist.">")
+  endif
+  if b:netrw_curdir == '/'
+   " remove .. from filelist when current directory is root directory
+"   call Decho("remove .. from filelist")
+   let filelist= substitute(filelist,'/\.\.\n','','')
+  endif
+  " remove multiple contiguous newlines
+  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
+  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+   " change all \s to /s
+"   call Decho('change all \s to /s')
+   let filelist= substitute(filelist,'\','/','g')
+  else
+   " escape all \s to \\
+"   call Decho('escape all \s to \\')
+   let filelist= substitute(filelist,'\','\\','g')
+  endif
+
+"  call Decho("(before while) dirname<".dirname.">")
+"  call Decho("(before while) dirnamelen<".dirnamelen.">")
+"  call Decho("(before while) filelist<".filelist.">")
+
+  while filelist != ""
+   if filelist =~ '\n'
+    let filename = substitute(filelist,'\n.*$','','e')
+    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
+   else
+    let filename = filelist
+    let filelist = ""
+   endif
+"   call Decho(" ")
+"   call Decho("(while) filelist<".filelist.">")
+"   call Decho("(while) filename<".filename.">")
+
+   if getftype(filename) == "link"
+    " indicate a symbolic link
+"    call Decho("indicate <".filename."> is a symbolic link with trailing @")
+    let pfile= filename."@"
+
+   elseif getftype(filename) == "socket"
+    " indicate a socket
+"    call Decho("indicate <".filename."> is a socket with trailing =")
+    let pfile= filename."="
+
+   elseif getftype(filename) == "fifo"
+    " indicate a fifo
+"    call Decho("indicate <".filename."> is a fifo with trailing |")
+    let pfile= filename."|"
+
+   elseif isdirectory(filename)
+    " indicate a directory
+"    call Decho("indicate <".filename."> is a directory with trailing /")
+    let pfile= filename."/"
+
+   elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename)
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+     if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$'
+      " indicate an executable
+"      call Decho("indicate <".filename."> is executable with trailing *")
+      let pfile= filename."*"
+     else
+      " normal file
+      let pfile= filename
+     endif
+    elseif executable(filename)
+     " indicate an executable
+"     call Decho("indicate <".filename."> is executable with trailing *")
+     let pfile= filename."*"
+    else
+     " normal file
+     let pfile= filename
+    endif
+
+   else
+    " normal file
+    let pfile= filename
+   endif
+"   call Decho("pfile<".pfile."> (after *@/ appending)")
+
+   if pfile =~ '//$'
+    let pfile= substitute(pfile,'//$','/','e')
+"    call Decho("change // to /: pfile<".pfile.">")
+   endif
+   let pfile= strpart(pfile,dirnamelen)
+   let pfile= substitute(pfile,'^[/\\]','','e')
+"   call Decho("filename<".filename.">")
+"   call Decho("pfile   <".pfile.">")
+
+   if w:netrw_liststyle == s:LONGLIST
+    let sz   = getfsize(filename)
+    let fsz  = strpart("               ",1,15-s:Strlen(sz)).sz
+    let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
+"    call Decho("sz=".sz." fsz=".fsz)
+   endif
+
+   if     g:netrw_sort_by =~ "^t"
+    " sort by time (handles time up to 1 quintillion seconds, US)
+"    call Decho("getftime(".filename.")=".getftime(filename))
+    let t  = getftime(filename)
+    let ft = strpart("000000000000000000",1,18-s:Strlen(t)).t
+"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
+    let ftpfile= ft.'/'.pfile
+    keepjumps silent! put=ftpfile
+
+   elseif g:netrw_sort_by =~ "^s"
+    " sort by size (handles file sizes up to 1 quintillion bytes, US)
+"    call Decho("getfsize(".filename.")=".getfsize(filename))
+    let sz   = getfsize(filename)
+    let fsz  = strpart("000000000000000000",1,18-s:Strlen(sz)).sz
+"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
+    let fszpfile= fsz.'/'.pfile
+    keepjumps silent! put =fszpfile
+
+   else
+    " sort by name
+"    call Decho("exe keepjumps put ='".pfile."'")
+    keepjumps silent! put=pfile
+   endif
+  endwhile
+
+  " cleanup any windows mess at end-of-line
+  silent! keepjumps %s/\r$//e
+  exe "setlocal ts=".g:netrw_maxfilenamelen
+"  call Decho("setlocal ts=".g:netrw_maxfilenamelen)
+
+"  call Dret("s:LocalListing")
+endfun
+
+" ---------------------------------------------------------------------
+" s:LocalBrowseShellCmdRefresh: this function is called after a user has {{{2
+" performed any shell command.  The idea is to cause all local-browsing
+" buffers to be refreshed after a user has executed some shell command,
+" on the chance that s/he removed/created a file/directory with it.
+fun! s:LocalBrowseShellCmdRefresh()
+"  call Dfunc("LocalBrowseShellCmdRefresh() browselist=".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "empty")." ".tabpagenr("$")." tabs")
+  " determine which buffers currently reside in a tab
+  if !exists("s:netrw_browselist")
+"   call Dret("LocalBrowseShellCmdRefresh : browselist is empty")
+   return
+  endif
+  if !exists("w:netrw_bannercnt")
+"   call Dret("LocalBrowseShellCmdRefresh : don't refresh when focus not on netrw windwo")
+   return
+  endif
+  let itab       = 1
+  let buftablist = []
+  while itab <= tabpagenr("$")
+   let buftablist = buftablist + tabpagebuflist()
+   let itab       = itab + 1
+   tabn
+  endwhile
+"  call Decho("buftablist".string(buftablist))
+"  call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
+  "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
+  "   | refresh any netrw window
+  "   | wipe out any non-displaying netrw buffer
+  let curwin = winnr()
+  let ibl    = 0
+  for ibuf in s:netrw_browselist
+"   call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
+   if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
+    " wipe out any non-displaying netrw buffer
+"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
+    exe "silent! bd ".fnameescape(ibuf)
+    call remove(s:netrw_browselist,ibl)
+"    call Decho("browselist=".string(s:netrw_browselist))
+    continue
+   elseif index(tabpagebuflist(),ibuf) != -1
+    " refresh any netrw buffer
+"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
+    exe bufwinnr(ibuf)."wincmd w"
+    call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+   endif
+   let ibl= ibl + 1
+  endfor
+  exe curwin."wincmd w"
+
+"  call Dret("LocalBrowseShellCmdRefresh")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLocalRm: {{{2
+fun! s:NetrwLocalRm(path) range
+"  call Dfunc("s:NetrwLocalRm(path<".a:path.">)")
+"  call Decho("firstline=".a:firstline." lastline=".a:lastline)
+
+  " preparation for removing multiple files/directories
+  let ret   = 0
+  let all   = 0
+  let svpos = netrw#NetrwSavePosn()
+
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   " remove all marked files
+"   call Decho("remove all marked files")
+   for fname in s:netrwmarkfilelist_{bufnr("%")}
+    let ok= s:NetrwLocalRmFile(a:path,fname,all)
+    if ok =~ 'q\%[uit]' || ok == "no"
+     break
+    elseif ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endfor
+   call s:NetrwUnMarkFile(1)
+
+  else
+  " remove (multiple) files and directories
+"   call Decho("remove files in range [".a:firstline.",".a:lastline."]")
+
+   let ctr = a:firstline
+   while ctr <= a:lastline
+    exe "keepjumps ".ctr
+
+    " sanity checks
+    if line(".") < w:netrw_bannercnt
+     let ctr= ctr + 1
+     continue
+    endif
+    let curword= s:NetrwGetWord()
+    if curword == "./" || curword == "../"
+     let ctr= ctr + 1
+     continue
+    endif
+    let ok= s:NetrwLocalRmFile(a:path,curword,all)
+    if ok =~ 'q\%[uit]' || ok == "no"
+     break
+    elseif ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+    let ctr= ctr + 1
+   endwhile
+  endif
+
+  " refresh the directory
+"  call Decho("bufname<".bufname("%").">")
+  if bufname("%") != "NetrwMessage"
+   call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+   call netrw#NetrwRestorePosn(svpos)
+  endif
+
+"  call Dret("s:NetrwLocalRm")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLocalRmFile: remove file fname given the path {{{2
+"                     Give confirmation prompt unless all==1
+fun! s:NetrwLocalRmFile(path,fname,all)
+"  call Dfunc("s:NetrwLocalRmFile(path<".a:path."> fname<".a:fname."> all=".a:all)
+  
+  let all= a:all
+  let ok = ""
+  norm! 0
+  let rmfile= s:ComposePath(a:path,a:fname)
+"  call Decho("rmfile<".rmfile.">")
+
+  if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '[\/]$')
+   " attempt to remove file
+"   call Decho("attempt to remove file<".rmfile.">")
+   if !all
+    echohl Statement
+    call inputsave()
+    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+    call inputrestore()
+    echohl NONE
+    if ok == ""
+     let ok="no"
+    endif
+"    call Decho("response: ok<".ok.">")
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+"    call Decho("response: ok<".ok."> (after sub)")
+    if ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endif
+
+   if all || ok =~ 'y\%[es]' || ok == ""
+    let ret= s:NetrwDelete(rmfile)
+"    call Decho("errcode=".v:shell_error." ret=".ret)
+   endif
+
+  else
+   " attempt to remove directory
+   if !all
+    echohl Statement
+    call inputsave()
+    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+    call inputrestore()
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+    if ok == ""
+     let ok="no"
+    endif
+    if ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endif
+   let rmfile= substitute(rmfile,'[\/]$','','e')
+
+   if all || ok =~ 'y\%[es]' || ok == ""
+"    call Decho("1st attempt: system(s:WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
+    call system(s:WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
+"    call Decho("v:shell_error=".v:shell_error)
+
+    if v:shell_error != 0
+"     call Decho("2nd attempt to remove directory<".rmfile.">")
+     let errcode= s:NetrwDelete(rmfile)
+"     call Decho("errcode=".errcode)
+
+     if errcode != 0
+      if has("unix")
+"       call Decho("3rd attempt to remove directory<".rmfile.">")
+       call system("rm ".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
+   endif
+  endif
+
+"  call Dret("s:NetrwLocalRmFile ".ok)
+  return ok
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLocalRename: rename a remote file or directory {{{2
+fun! s:NetrwLocalRename(path) range
+"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
+
+  " preparation for removing multiple files/directories
+  let ctr  = a:firstline
+  let svpos= netrw#NetrwSavePosn()
+
+  " rename files given by the markfilelist
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   for oldname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("oldname<".oldname.">")
+    if exists("subfrom")
+     let newname= substitute(oldname,subfrom,subto,'')
+"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+    else
+     call inputsave()
+     let newname= input("Moving ".oldname." to : ",oldname)
+     call inputrestore()
+     if newname =~ '^s/'
+      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
+      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
+"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+      let newname = substitute(oldname,subfrom,subto,'')
+     endif
+    endif
+    call rename(oldname,newname)
+   endfor
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+  
+  else
+
+   " attempt to rename files/directories
+   while ctr <= a:lastline
+    exe "keepjumps ".ctr
+
+    " sanity checks
+    if line(".") < w:netrw_bannercnt
+     let ctr= ctr + 1
+     continue
+    endif
+    let curword= s:NetrwGetWord()
+    if curword == "./" || curword == "../"
+     let ctr= ctr + 1
+     continue
+    endif
+
+    norm! 0
+    let oldname= s:ComposePath(a:path,curword)
+"   call Decho("oldname<".oldname.">")
+
+    call inputsave()
+    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
+    call inputrestore()
+
+    call rename(oldname,newname)
+"   call Decho("renaming <".oldname."> to <".newname.">")
+
+    let ctr= ctr + 1
+   endwhile
+  endif
+
+  " refresh the directory
+"  call Decho("refresh the directory listing")
+  call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+
+"  call Dret("NetrwLocalRename")
+endfun
+
+" ---------------------------------------------------------------------
+" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
+"
+"     g:netrw_    Directory Is
+"     fastbrowse  Local  Remote   
+"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
+"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
+"  fast   2         H      H      
+"
+"  Deleting a buffer means that it will be re-loaded when examined, hence "slow".
+"  Hiding   a buffer means that it will be re-used   when examined, hence "fast".
+"           (re-using a buffer may not be as accurate)
+fun! s:LocalFastBrowser()
+"  call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse)
+
+  " initialize browselist, a list of buffer numbers that the local browser has used
+  if !exists("s:netrw_browselist")
+"   call Decho("initialize s:netrw_browselist")
+   let s:netrw_browselist= []
+  endif
+
+  " append current buffer to fastbrowse list
+  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
+"   call Decho("appendng current buffer to browselist")
+   call add(s:netrw_browselist,bufnr("%"))
+"   call Decho("browselist=".string(s:netrw_browselist))
+  endif
+
+  " enable autocmd events to handle refreshing/removing local browser buffers
+  "    If local browse buffer is currently showing: refresh it
+  "    If local browse buffer is currently hidden : wipe it
+  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
+"   call Decho("setting up local-browser shell command refresh")
+   let s:netrw_browser_shellcmd= 1
+   augroup AuNetrwShellCmd
+    au!
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+     au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
+    else
+     au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
+    endif
+   augroup END
+  endif
+
+  " user must have changed fastbrowse to its fast setting, so remove
+  " the associated autocmd events
+  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
+"   call Decho("remove AuNetrwShellCmd autcmd group")
+   unlet s:netrw_browser_shellcmd
+   augroup AuNetrwShellCmd
+    au!
+   augroup END
+   augroup! AuNetrwShellCmd
+  endif
+
+"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
+endfun
+
+" ---------------------------------------------------------------------
+" Support Functions: {{{1
+
+" ---------------------------------------------------------------------
+" netrw#ErrorMsg: {{{2
+"   0=note     = s:NOTE
+"   1=warning  = s:WARNING
+"   2=error    = s:ERROR
+"  Aug 22, 2008 : max errnum currently is 72
+fun! netrw#ErrorMsg(level,msg,errnum)
+"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
+
+  if a:level == 1
+   let level= "**warning** (netrw) "
+  elseif a:level == 2
+   let level= "**error** (netrw) "
+  else
+   let level= "**note** (netrw) "
+  endif
+"  call Decho("level=".level)
+
+  if g:netrw_use_errorwindow
+   " (default) netrw creates a one-line window to show error/warning
+   " messages (reliably displayed)
+
+   " record current window number for NetrwRestorePosn()'s benefit
+   let s:winBeforeErr= winnr()
+"   call Decho("s:winBeforeErr=".s:winBeforeErr)
+
+   " getting messages out reliably is just plain difficult!
+   " This attempt splits the current window, creating a one line window.
+   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
+"    call Decho("write to NetrwMessage buffer")
+    exe bufwinnr("NetrwMessage")."wincmd w"
+"    call Decho("setlocal ma noro")
+    setlocal ma noro
+    call setline(line("$")+1,level.a:msg)
+    $
+   else
+"    call Decho("create a NetrwMessage buffer window")
+    bo 1split
+    enew
+    setlocal bt=nofile
+    file NetrwMessage
+"    call Decho("setlocal ma noro")
+    setlocal ma noro
+    call setline(line("$"),level.a:msg)
+   endif
+"   call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
+   if &fo !~ '[ta]'
+    syn clear
+    syn match netrwMesgNote	"^\*\*note\*\*"
+    syn match netrwMesgWarning	"^\*\*warning\*\*"
+    syn match netrwMesgError	"^\*\*error\*\*"
+    hi link netrwMesgWarning WarningMsg
+    hi link netrwMesgError   Error
+   endif
+   setlocal noma ro bh=wipe
+
+  else
+   " (optional) netrw will show messages using echomsg.  Even if the
+   " message doesn't appear, at least it'll be recallable via :messages
+"   redraw!
+   if a:level == s:WARNING
+    echohl WarningMsg
+   elseif a:level == s:ERROR
+    echohl Error
+   endif
+   echomsg level.a:msg
+"   call Decho("echomsg ***netrw*** ".a:msg)
+   echohl None
+  endif
+
+"  call Dret("netrw#ErrorMsg")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetrwRestorePosn: restores the cursor and file position as saved by NetrwSavePosn() {{{2
+fun! netrw#NetrwRestorePosn(...)
+"  call Dfunc("netrw#NetrwRestorePosn() a:0=".a:0." winnr=".(exists("w:netrw_winnr")? w:netrw_winnr : -1)." line=".(exists("w:netrw_line")? w:netrw_line : -1)." col=".(exists("w:netrw_col")? w:netrw_col : -1)." hline=".(exists("w:netrw_hline")? w:netrw_hline : -1))
+  let eikeep= &ei
+  set ei=all
+  if expand("%") == "NetrwMessage"
+   exe s:winBeforeErr."wincmd w"
+  endif
+
+  if a:0 > 0
+   exe a:1
+  endif
+
+  " restore window
+  if exists("w:netrw_winnr")
+"   call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
+   exe "silent! ".w:netrw_winnr."wincmd w"
+  endif
+  if v:shell_error == 0
+   " as suggested by Bram M: redraw on no error
+   " allows protocol error messages to remain visible
+"   redraw!
+  endif
+
+  " restore top-of-screen line
+  if exists("w:netrw_hline")
+"   call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
+   exe "norm! ".w:netrw_hline."G0z\<CR>"
+  endif
+
+  " restore position
+  if exists("w:netrw_line") && exists("w:netrw_col")
+"   call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
+   exe "norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
+  endif
+
+  let &ei= eikeep
+"  call Dret("netrw#NetrwRestorePosn")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetrwSavePosn: saves position of cursor on screen {{{2
+fun! netrw#NetrwSavePosn()
+"  call Dfunc("netrw#NetrwSavePosn()")
+  " Save current line and column
+  let w:netrw_winnr= winnr()
+  let w:netrw_line = line(".")
+  let w:netrw_col  = virtcol(".")
+
+  " Save top-of-screen line
+  norm! H0
+  let w:netrw_hline= line(".")
+
+  " set up string holding position parameters
+  let ret          = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline
+
+  call netrw#NetrwRestorePosn()
+"  call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
+  return ret
+endfun
+
+" ------------------------------------------------------------------------
+"  netrw#RFC2396: converts %xx into characters {{{2
+fun! netrw#RFC2396(fname)
+"  call Dfunc("netrw#RFC2396(fname<".a:fname.">)")
+  let fname = escape(substitute(a:fname,'%\(\x\x\)','\=nr2char("0x".submatch(1))','ge')," \t")
+"  call Dret("netrw#RFC2396 ".fname)
+  return fname
+endfun
+
+" ---------------------------------------------------------------------
+"  s:ComposePath: Appends a new part to a path taking different systems into consideration {{{2
+fun! s:ComposePath(base,subdir)
+"  call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
+
+  if(has("amiga"))
+"   call Decho("amiga")
+   let ec = a:base[strlen(a:base)-1]
+   if ec != '/' && ec != ':'
+    let ret = a:base . "/" . a:subdir
+   else
+    let ret = a:base . a:subdir
+   endif
+
+  elseif a:subdir =~ '^\a:[/\\][^/\\]' && (has("win32") || has("win95") || has("win64") || has("win16"))
+"   call Decho("windows")
+   let ret= a:subdir
+
+  elseif a:base =~ '^\a\+://'
+"   call Decho("remote linux/macos")
+   let urlbase = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\1','')
+   let curpath = substitute(a:base,'^\(\a\+://.\{-}/\)\(.*\)$','\2','')
+   if a:subdir == '../'
+    if curpath =~ '[^/]/[^/]\+/$'
+     let curpath= substitute(curpath,'[^/]\+/$','','')
+    else
+     let curpath=""
+    endif
+    let ret= urlbase.curpath
+   else
+    let ret= urlbase.curpath.a:subdir
+   endif
+"   call Decho("urlbase<".urlbase.">")
+"   call Decho("curpath<".curpath.">")
+"   call Decho("ret<".ret.">")
+
+  else
+"   call Decho("local linux/macos")
+   let ret = substitute(a:base."/".a:subdir,"//","/","g")
+   if a:base =~ '^//'
+    " keeping initial '//' for the benefit of network share listing support
+    let ret= '/'.ret
+   endif
+   let ret= simplify(ret)
+  endif
+
+"  call Dret("s:ComposePath ".ret)
+  return ret
+endfun
+
+" ---------------------------------------------------------------------
+" s:FileReadable: o/s independent filereadable {{{2
+fun! s:FileReadable(fname)
+"  call Dfunc("s:FileReadable(fname<".a:fname.">)")
+
+  if g:netrw_cygwin
+   let ret= filereadable(substitute(a:fname,'/cygdrive/\(.\)','\1:/',''))
+  else
+   let ret= filereadable(a:fname)
+  endif
+
+"  call Dret("s:FileReadable ".ret)
+  return ret
+endfun
+
+" ---------------------------------------------------------------------
+"  s:GetTempfile: gets a tempname that'll work for various o/s's {{{2
+"                 Places correct suffix on end of temporary filename,
+"                 using the suffix provided with fname
+fun! s:GetTempfile(fname)
+"  call Dfunc("s:GetTempfile(fname<".a:fname.">)")
+
+  if !exists("b:netrw_tmpfile")
+   " get a brand new temporary filename
+   let tmpfile= tempname()
+"   call Decho("tmpfile<".tmpfile."> : from tempname()")
+
+   let tmpfile= substitute(tmpfile,'\','/','ge')
+"   call Decho("tmpfile<".tmpfile."> : chgd any \\ -> /")
+
+   " sanity check -- does the temporary file's directory exist?
+   if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
+"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+    call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
+"    call Dret("s:GetTempfile getcwd<".getcwd().">")
+    return ""
+   endif
+
+   " let netrw#NetSource() know about the tmpfile
+   let s:netrw_tmpfile= tmpfile " used by netrw#NetSource()
+"   call Decho("tmpfile<".tmpfile."> s:netrw_tmpfile<".s:netrw_tmpfile.">")
+
+   " o/s dependencies
+   if g:netrw_cygwin != 0
+    let tmpfile = substitute(tmpfile,'^\(\a\):','/cygdrive/\1','e')
+   elseif has("win32") || has("win95") || has("win64") || has("win16")
+    if !exists("+shellslash") || !&ssl
+     let tmpfile = substitute(tmpfile,'/','\','g')
+    endif
+   else
+    let tmpfile = tmpfile
+   endif
+   let b:netrw_tmpfile= tmpfile
+"   call Decho("o/s dependent fixed tempname<".tmpfile.">")
+  else
+   " re-use temporary filename
+   let tmpfile= b:netrw_tmpfile
+"   call Decho("tmpfile<".tmpfile."> re-using")
+  endif
+
+  " use fname's suffix for the temporary file
+  if a:fname != ""
+   if a:fname =~ '\.[^./]\+$'
+"    call Decho("using fname<".a:fname.">'s suffix")
+    if a:fname =~ '.tar.gz' || a:fname =~ '.tar.bz2'
+     let suffix = ".tar".substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
+    else
+     let suffix = substitute(a:fname,'^.*\(\.[^./]\+\)$','\1','e')
+    endif
+"    call Decho("suffix<".suffix.">")
+    let tmpfile= substitute(tmpfile,'\.tmp$','','e')
+"    call Decho("chgd tmpfile<".tmpfile."> (removed any .tmp suffix)")
+    let tmpfile .= suffix
+"    call Decho("chgd tmpfile<".tmpfile."> (added ".suffix." suffix) netrw_fname<".b:netrw_fname.">")
+    let s:netrw_tmpfile= tmpfile " supports netrw#NetSource()
+   endif
+  endif
+
+"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"  call Dret("s:GetTempfile <".tmpfile.">")
+  return tmpfile
+endfun
+
+" ---------------------------------------------------------------------
+" s:MakeSshCmd: transforms input command using USEPORT HOSTNAME into {{{2
+"               a correct command for use with a system() call
+fun! s:MakeSshCmd(sshcmd)
+"  call Dfunc("s:MakeSshCmd(sshcmd<".a:sshcmd.">) user<".s:user."> machine<".s:machine.">")
+  let sshcmd = substitute(a:sshcmd,'\<HOSTNAME\>',s:user.s:machine,'')
+  if exists("g:netrw_port") && g:netrw_port != ""
+   let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.g:netrw_port,'')
+  elseif exists("s:port") && s:port != ""
+   let sshcmd= substitute(sshcmd,"USEPORT",g:netrw_sshport.' '.s:port,'')
+  else
+   let sshcmd= substitute(sshcmd,"USEPORT ",'','')
+  endif
+"  call Dret("s:MakeSshCmd <".sshcmd.">")
+  return sshcmd
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwBMShow: {{{2
+fun! s:NetrwBMShow()
+"  call Dfunc("s:NetrwBMShow()")
+  redir => bmshowraw
+   menu
+  redir END
+  let bmshowlist = split(bmshowraw,'\n')
+  if bmshowlist != []
+   let bmshowfuncs= filter(bmshowlist,'v:val =~ "<SNR>\\d\\+_BMShow()"')
+   if bmshowfuncs != []
+    let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
+    if bmshowfunc =~ '^call.*BMShow()'
+     exe "silent! ".bmshowfunc
+    endif
+   endif
+  endif
+"  call Dret("s:NetrwBMShow : bmshowfunc<".(exists("bmshowfunc")? bmshowfunc : 'n/a').">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwDelete: Deletes a file. {{{2
+"           Uses Steve Hall's idea to insure that Windows paths stay
+"           acceptable.  No effect on Unix paths.
+"  Examples of use:  let result= s:NetrwDelete(path)
+fun! s:NetrwDelete(path)
+"  call Dfunc("s:NetrwDelete(path<".a:path.">)")
+
+  let path = s:WinPath(a:path)
+  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+   if exists("+shellslash")
+    let sskeep= &shellslash
+    setlocal noshellslash
+    let result      = delete(path)
+    let &shellslash = sskeep
+   else
+"    call Decho("exe let result= ".a:cmd."('".path."')")
+    let result= delete(path)
+   endif
+  else
+"   call Decho("let result= delete(".path.")")
+   let result= delete(path)
+  endif
+  if result < 0
+   call Netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
+  endif
+
+"  call Dret("s:NetrwDelete ".result)
+  return result
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
+fun! s:NetrwEnew(curdir)
+"  call Dfunc("s:NetrwEnew(curdir<".a:curdir.">) buf#".bufnr("%")."<".bufname("%").">")
+
+  " grab a function-local-variable copy of buffer variables
+  if exists("b:netrw_bannercnt")      |let netrw_bannercnt       = b:netrw_bannercnt      |endif
+  if exists("b:netrw_browser_active") |let netrw_browser_active  = b:netrw_browser_active |endif
+  if exists("b:netrw_cpf")            |let netrw_cpf             = b:netrw_cpf            |endif
+  if exists("b:netrw_curdir")         |let netrw_curdir          = b:netrw_curdir         |endif
+  if exists("b:netrw_explore_bufnr")  |let netrw_explore_bufnr   = b:netrw_explore_bufnr  |endif
+  if exists("b:netrw_explore_indx")   |let netrw_explore_indx    = b:netrw_explore_indx   |endif
+  if exists("b:netrw_explore_line")   |let netrw_explore_line    = b:netrw_explore_line   |endif
+  if exists("b:netrw_explore_list")   |let netrw_explore_list    = b:netrw_explore_list   |endif
+  if exists("b:netrw_explore_listlen")|let netrw_explore_listlen = b:netrw_explore_listlen|endif
+  if exists("b:netrw_explore_mtchcnt")|let netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
+  if exists("b:netrw_fname")          |let netrw_fname           = b:netrw_fname          |endif
+  if exists("b:netrw_lastfile")       |let netrw_lastfile        = b:netrw_lastfile       |endif
+  if exists("b:netrw_liststyle")      |let netrw_liststyle       = b:netrw_liststyle      |endif
+  if exists("b:netrw_method")         |let netrw_method          = b:netrw_method         |endif
+  if exists("b:netrw_option")         |let netrw_option          = b:netrw_option         |endif
+  if exists("b:netrw_prvdir")         |let netrw_prvdir          = b:netrw_prvdir         |endif
+
+  call s:NetrwOptionRestore("w:")
+"  call Decho("generate a buffer with keepjumps keepalt enew!")
+  keepjumps keepalt enew!
+  call s:NetrwOptionSave("w:")
+
+  " copy function-local-variables to buffer variable equivalents
+  if exists("netrw_bannercnt")      |let b:netrw_bannercnt       = netrw_bannercnt      |endif
+  if exists("netrw_browser_active") |let b:netrw_browser_active  = netrw_browser_active |endif
+  if exists("netrw_cpf")            |let b:netrw_cpf             = netrw_cpf            |endif
+  if exists("netrw_curdir")         |let b:netrw_curdir          = netrw_curdir         |endif
+  if exists("netrw_explore_bufnr")  |let b:netrw_explore_bufnr   = netrw_explore_bufnr  |endif
+  if exists("netrw_explore_indx")   |let b:netrw_explore_indx    = netrw_explore_indx   |endif
+  if exists("netrw_explore_line")   |let b:netrw_explore_line    = netrw_explore_line   |endif
+  if exists("netrw_explore_list")   |let b:netrw_explore_list    = netrw_explore_list   |endif
+  if exists("netrw_explore_listlen")|let b:netrw_explore_listlen = netrw_explore_listlen|endif
+  if exists("netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt = netrw_explore_mtchcnt|endif
+  if exists("netrw_fname")          |let b:netrw_fname           = netrw_fname          |endif
+  if exists("netrw_lastfile")       |let b:netrw_lastfile        = netrw_lastfile       |endif
+  if exists("netrw_liststyle")      |let b:netrw_liststyle       = netrw_liststyle      |endif
+  if exists("netrw_method")         |let b:netrw_method          = netrw_method         |endif
+  if exists("netrw_option")         |let b:netrw_option          = netrw_option         |endif
+  if exists("netrw_prvdir")         |let b:netrw_prvdir          = netrw_prvdir         |endif
+
+  let b:netrw_curdir= a:curdir
+  if b:netrw_curdir =~ '/$'
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+    file NetrwTreeListing
+    nno <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
+    nno <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
+   else
+    exe "silent! keepalt file ".fnameescape(b:netrw_curdir)
+   endif
+  endif
+
+"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
+endfun
+
+" ------------------------------------------------------------------------
+" s:NetrwSaveWordPosn: used to keep cursor on same word after refresh, {{{2
+" changed sorting, etc.  Also see s:NetrwRestoreWordPosn().
+fun! s:NetrwSaveWordPosn()
+"  call Dfunc("NetrwSaveWordPosn()")
+  let s:netrw_saveword= '^'.fnameescape(getline('.')).'$'
+"  call Dret("NetrwSaveWordPosn : saveword<".s:netrw_saveword.">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRestoreWordPosn: used to keep cursor on same word after refresh, {{{2
+"  changed sorting, etc.  Also see s:NetrwSaveWordPosn().
+fun! s:NetrwRestoreWordPosn()
+"  call Dfunc("NetrwRestoreWordPosn()")
+  silent! call search(s:netrw_saveword,'w')
+"  call Dret("NetrwRestoreWordPosn")
+endfun
+
+" ---------------------------------------------------------------------
+" s:RestoreBufVars: {{{2
+fun! s:RestoreBufVars()
+"  call Dfunc("s:RestoreBufVars()")
+
+  if exists("s:netrw_curdir")        |let b:netrw_curdir         = s:netrw_curdir        |endif
+  if exists("s:netrw_lastfile")      |let b:netrw_lastfile       = s:netrw_lastfile      |endif
+  if exists("s:netrw_method")        |let b:netrw_method         = s:netrw_method        |endif
+  if exists("s:netrw_fname")         |let b:netrw_fname          = s:netrw_fname         |endif
+  if exists("s:netrw_machine")       |let b:netrw_machine        = s:netrw_machine       |endif
+  if exists("s:netrw_browser_active")|let b:netrw_browser_active = s:netrw_browser_active|endif
+
+"  call Dret("s:RestoreBufVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:RemotePathAnalysis: {{{2
+fun! s:RemotePathAnalysis(dirname)
+"  call Dfunc("s:RemotePathAnalysis()")
+
+  let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$'
+  let s:method  = substitute(a:dirname,dirpat,'\1','')
+  let s:user    = substitute(a:dirname,dirpat,'\2','')
+  let s:machine = substitute(a:dirname,dirpat,'\3','')
+  let s:port    = substitute(a:dirname,dirpat,'\4','')
+  let s:path    = substitute(a:dirname,dirpat,'\5','')
+  let s:fname   = substitute(a:dirname,'^.*/\ze.','','')
+
+"  call Decho("set up s:method <".s:method .">")
+"  call Decho("set up s:user   <".s:user   .">")
+"  call Decho("set up s:machine<".s:machine.">")
+"  call Decho("set up s:port   <".s:port.">")
+"  call Decho("set up s:path   <".s:path   .">")
+"  call Decho("set up s:fname  <".s:fname  .">")
+
+"  call Dret("s:RemotePathAnalysis")
+endfun
+
+" ---------------------------------------------------------------------
+" s:RemoteSystem: runs a command on a remote host using ssh {{{2
+"                 Returns status
+" Runs system() on
+"    [cd REMOTEDIRPATH;] a:cmd
+" Note that it doesn't do shellescape(a:cmd)!
+fun! s:RemoteSystem(cmd)
+"  call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)")
+  if !executable(g:netrw_ssh_cmd)
+   call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
+  elseif !exists("b:netrw_curdir")
+   call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+  else
+   let cmd      = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME")
+   let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
+   if remotedir != ""
+    let cmd= cmd.' cd '.shellescape(remotedir).";"
+   else
+    let cmd= cmd.' '
+   endif
+   let cmd= cmd.a:cmd
+"   call Decho("call system(".cmd.")")
+   let ret= system(cmd)
+  endif
+"  call Dret("s:RemoteSystem ".ret)
+  return ret
+endfun
+
+" ---------------------------------------------------------------------
+" s:RestoreWinVars: (used by Explore() and NetrwSplit()) {{{2
+fun! s:RestoreWinVars()
+"  call Dfunc("s:RestoreWinVars()")
+  if exists("s:bannercnt")      |let w:netrw_bannercnt       = s:bannercnt      |unlet s:bannercnt      |endif
+  if exists("s:col")            |let w:netrw_col             = s:col            |unlet s:col            |endif
+  if exists("s:curdir")         |let w:netrw_curdir          = s:curdir         |unlet s:curdir         |endif
+  if exists("s:explore_bufnr")  |let w:netrw_explore_bufnr   = s:explore_bufnr  |unlet s:explore_bufnr  |endif
+  if exists("s:explore_indx")   |let w:netrw_explore_indx    = s:explore_indx   |unlet s:explore_indx   |endif
+  if exists("s:explore_line")   |let w:netrw_explore_line    = s:explore_line   |unlet s:explore_line   |endif
+  if exists("s:explore_listlen")|let w:netrw_explore_listlen = s:explore_listlen|unlet s:explore_listlen|endif
+  if exists("s:explore_list")   |let w:netrw_explore_list    = s:explore_list   |unlet s:explore_list   |endif
+  if exists("s:explore_mtchcnt")|let w:netrw_explore_mtchcnt = s:explore_mtchcnt|unlet s:explore_mtchcnt|endif
+  if exists("s:fpl")            |let w:netrw_fpl             = s:fpl            |unlet s:fpl            |endif
+  if exists("s:hline")          |let w:netrw_hline           = s:hline          |unlet s:hline          |endif
+  if exists("s:line")           |let w:netrw_line            = s:line           |unlet s:line           |endif
+  if exists("s:liststyle")      |let w:netrw_liststyle       = s:liststyle      |unlet s:liststyle      |endif
+  if exists("s:method")         |let w:netrw_method          = s:method         |unlet s:method         |endif
+  if exists("s:prvdir")         |let w:netrw_prvdir          = s:prvdir         |unlet s:prvdir         |endif
+  if exists("s:treedict")       |let w:netrw_treedict        = s:treedict       |unlet s:treedict       |endif
+  if exists("s:treetop")        |let w:netrw_treetop         = s:treetop        |unlet s:treetop        |endif
+  if exists("s:winnr")          |let w:netrw_winnr           = s:winnr          |unlet s:winnr          |endif
+"  call Dret("s:RestoreWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:Rexplore: implements returning from a buffer to a netrw directory {{{2
+"
+"             s:SetRexDir() sets up <2-leftmouse> maps (if g:netrw_retmap
+"             is true) and a command, :Rexplore, which call this function.
+"
+"             s:nbcd_curpos_{bufnr('%')} is set up by s:NetrwBrowseChgDir()
+fun! s:NetrwRexplore(islocal,dirname)
+"  call Dfunc("s:NetrwRexplore(islocal=".a:islocal." dirname<".a:dirname.">)")
+  if a:islocal
+   call netrw#LocalBrowseCheck(a:dirname)
+  else
+   call s:NetrwBrowse(0,a:dirname)
+  endif
+  if exists("s:nbcd_curpos_{bufnr('%')}")
+   call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
+   unlet s:nbcd_curpos_{bufnr('%')}
+  endif
+"  call Dret("s:NetrwRexplore")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SaveBufVars: {{{2
+fun! s:SaveBufVars()
+"  call Dfunc("s:SaveBufVars()")
+
+  if exists("b:netrw_curdir")        |let s:netrw_curdir         = b:netrw_curdir        |endif
+  if exists("b:netrw_lastfile")      |let s:netrw_lastfile       = b:netrw_lastfile      |endif
+  if exists("b:netrw_method")        |let s:netrw_method         = b:netrw_method        |endif
+  if exists("b:netrw_fname")         |let s:netrw_fname          = b:netrw_fname         |endif
+  if exists("b:netrw_machine")       |let s:netrw_machine        = b:netrw_machine       |endif
+  if exists("b:netrw_browser_active")|let s:netrw_browser_active = b:netrw_browser_active|endif
+
+"  call Dret("s:SaveBufVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SaveWinVars: (used by Explore() and NetrwSplit()) {{{2
+fun! s:SaveWinVars()
+"  call Dfunc("s:SaveWinVars()")
+  if exists("w:netrw_bannercnt")      |let s:bannercnt       = w:netrw_bannercnt      |endif
+  if exists("w:netrw_col")            |let s:col             = w:netrw_col            |endif
+  if exists("w:netrw_curdir")         |let s:curdir          = w:netrw_curdir         |endif
+  if exists("w:netrw_explore_bufnr")  |let s:explore_bufnr   = w:netrw_explore_bufnr  |endif
+  if exists("w:netrw_explore_indx")   |let s:explore_indx    = w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_line")   |let s:explore_line    = w:netrw_explore_line   |endif
+  if exists("w:netrw_explore_listlen")|let s:explore_listlen = w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_list")   |let s:explore_list    = w:netrw_explore_list   |endif
+  if exists("w:netrw_explore_mtchcnt")|let s:explore_mtchcnt = w:netrw_explore_mtchcnt|endif
+  if exists("w:netrw_fpl")            |let s:fpl             = w:netrw_fpl            |endif
+  if exists("w:netrw_hline")          |let s:hline           = w:netrw_hline          |endif
+  if exists("w:netrw_line")           |let s:line            = w:netrw_line           |endif
+  if exists("w:netrw_liststyle")      |let s:liststyle       = w:netrw_liststyle      |endif
+  if exists("w:netrw_method")         |let s:method          = w:netrw_method         |endif
+  if exists("w:netrw_prvdir")         |let s:prvdir          = w:netrw_prvdir         |endif
+  if exists("w:netrw_treedict")       |let s:treedict        = w:netrw_treedict       |endif
+  if exists("w:netrw_treetop")        |let s:treetop         = w:netrw_treetop        |endif
+  if exists("w:netrw_winnr")          |let s:winnr           = w:netrw_winnr          |endif
+"  call Dret("s:SaveWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SetBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck()) {{{2
+"   To allow separate windows to have their own activities, such as
+"   Explore **/pattern, several variables have been made window-oriented.
+"   However, when the user splits a browser window (ex: ctrl-w s), these
+"   variables are not inherited by the new window.  SetBufWinVars() and
+"   UseBufWinVars() get around that.
+fun! s:SetBufWinVars()
+"  call Dfunc("s:SetBufWinVars()")
+  if exists("w:netrw_liststyle")      |let b:netrw_liststyle      = w:netrw_liststyle      |endif
+  if exists("w:netrw_bannercnt")      |let b:netrw_bannercnt      = w:netrw_bannercnt      |endif
+  if exists("w:netrw_method")         |let b:netrw_method         = w:netrw_method         |endif
+  if exists("w:netrw_prvdir")         |let b:netrw_prvdir         = w:netrw_prvdir         |endif
+  if exists("w:netrw_explore_indx")   |let b:netrw_explore_indx   = w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_listlen")|let b:netrw_explore_listlen= w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_mtchcnt")|let b:netrw_explore_mtchcnt= w:netrw_explore_mtchcnt|endif
+  if exists("w:netrw_explore_bufnr")  |let b:netrw_explore_bufnr  = w:netrw_explore_bufnr  |endif
+  if exists("w:netrw_explore_line")   |let b:netrw_explore_line   = w:netrw_explore_line   |endif
+  if exists("w:netrw_explore_list")   |let b:netrw_explore_list   = w:netrw_explore_list   |endif
+"  call Dret("s:SetBufWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:SetRexDir: set directory for :Rexplore {{{2
+fun! s:SetRexDir(islocal,dirname)
+"  call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)")
+  " set up Rex and leftmouse-double-click
+  if a:islocal
+   exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
+   if g:netrw_retmap
+    silent! unmap <2-leftmouse>
+    if !hasmapto("<Plug>NetrwReturn")
+     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
+    endif
+    let dir = escape(a:dirname, s:netrw_map_escape)
+    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(1,"'.dir.'")<cr>'
+   endif
+  else
+   exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
+   if g:netrw_retmap
+    silent! unmap <2-leftmouse>
+    if !hasmapto("<Plug>NetrwReturn")
+     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
+    endif
+    let dir = escape(a:dirname, s:netrw_map_escape)
+    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(0,"'.dir.'")<cr>'
+   endif
+  endif
+"  call Dret("s:SetRexDir")
+endfun
+
+" ---------------------------------------------------------------------
+" s:Strlen: this function returns the length of a string, even if its {{{2
+"           using two-byte etc characters.
+"           Currently, its only used if g:Align_xstrlen is set to a
+"           nonzero value.  Solution from Nicolai Weibull, vim docs
+"           (:help strlen()), Tony Mechelynck, and my own invention.
+fun! s:Strlen(x)
+"  call Dfunc("s:Strlen(x<".a:x.">")
+  if g:netrw_xstrlen == 1
+   " number of codepoints (Latin a + combining circumflex is two codepoints)
+   " (comment from TM, solution from NW)
+   let ret= strlen(substitute(a:x,'.','c','g'))
+
+  elseif g:netrw_xstrlen == 2
+   " number of spacing codepoints (Latin a + combining circumflex is one spacing 
+   " codepoint; a hard tab is one; wide and narrow CJK are one each; etc.)
+   " (comment from TM, solution from TM)
+   let ret=strlen(substitute(a:x, '.\Z', 'x', 'g')) 
+
+  elseif g:netrw_xstrlen == 3
+   " virtual length (counting, for instance, tabs as anything between 1 and 
+   " 'tabstop', wide CJK as 2 rather than 1, Arabic alif as zero when immediately 
+   " preceded by lam, one otherwise, etc.)
+   " (comment from TM, solution from me)
+   let modkeep= &mod
+   exe "norm! o\<esc>"
+   call setline(line("."),a:x)
+   let ret= virtcol("$") - 1
+   d
+   let &mod= modkeep
+
+  else
+   " at least give a decent default
+   ret= strlen(a:x)
+  endif
+"  call Dret("s:Strlen ".ret)
+  return ret
+endfun
+
+" ---------------------------------------------------------------------
+" s:TreeListMove: {{{2
+fun! s:TreeListMove(dir)
+"  call Dfunc("s:TreeListMove(dir<".a:dir.">)")
+  let curline  = getline('.')
+  let prvline  = (line(".") > 1)?         getline(line(".")-1) : ''
+  let nxtline  = (line(".") < line("$"))? getline(line(".")+1) : ''
+  let curindent= substitute(curline,'^\([| ]*\).\{-}$','\1','')
+  let indentm1 = substitute(curindent,'^| ','','')
+"  call Decho("prvline  <".prvline."> #".line(".")-1)
+"  call Decho("curline  <".curline."> #".line("."))
+"  call Decho("nxtline  <".nxtline."> #".line(".")+1)
+"  call Decho("curindent<".curindent.">")
+"  call Decho("indentm1 <".indentm1.">")
+
+  if curline !~ '/$'
+"   call Decho('regfile')
+   if     a:dir == '[' && prvline != ''
+    norm! 0
+    let nl = search('^'.indentm1.'[^|]','bWe')    " search backwards from regular file
+"    call Decho("regfile srch back: ".nl)
+   elseif a:dir == ']' && nxtline != ''
+    norm! $
+    let nl = search('^'.indentm1.'[^|]','We')     " search forwards from regular file
+"    call Decho("regfile srch fwd: ".nl)
+   endif
+
+  elseif a:dir == '[' && prvline != ''
+   norm! 0
+   let curline= line(".")
+   let nl     = search('^'.curindent.'[^|]','bWe') " search backwards From directory, same indentation
+"   call Decho("dir srch back ind: ".nl)
+   if nl != 0
+    if line(".") == curline-1
+     let nl= search('^'.indentm1.'[^|]','bWe')     " search backwards from directory, indentation - 1
+"     call Decho("dir srch back ind-1: ".nl)
+    endif
+   endif
+
+  elseif a:dir == ']' && nxtline != ''
+   norm! $
+   let curline = line(".")
+   let nl      = search('^'.curindent.'[^|]','We') " search forwards from directory, same indentation
+"   call Decho("dir srch fwd ind: ".nl)
+   if nl != 0
+    if line(".") == curline+1
+     let nl= search('^'.indentm1.'[^|]','We')         " search forwards from directory, indentation - 1
+"     call Decho("dir srch fwd ind-1: ".nl)
+    endif
+   endif
+
+  endif
+
+"  call Dret("s:TreeListMove")
+endfun
+
+" ---------------------------------------------------------------------
+" s:UpdateBuffersMenu: does emenu Buffers.Refresh (but due to locale, the menu item may not be called that) {{{2
+"                      The Buffers.Refresh menu calls s:BMShow(); unfortunately, that means that that function
+"                      can't be called except via emenu.  But due to locale, that menu line may not be called
+"                      Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
+fun! s:UpdateBuffersMenu()
+"  call Dfunc("s:UpdateBuffersMenu()")
+  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm'
+   try
+    silent emenu Buffers.Refresh\ menu
+   catch /^Vim\%((\a\+)\)\=:E/
+    let v:errmsg= ""
+    silent call s:NetrwBMShow()
+   endtry
+  endif
+"  call Dret("s:UpdateBuffersMenu")
+endfun
+
+" ---------------------------------------------------------------------
+" s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
+"              Matching function to BufferWinVars()
+fun! s:UseBufWinVars()
+"  call Dfunc("s:UseBufWinVars()")
+  if exists("b:netrw_liststyle")       && !exists("w:netrw_liststyle")      |let w:netrw_liststyle       = b:netrw_liststyle      |endif
+  if exists("b:netrw_bannercnt")       && !exists("w:netrw_bannercnt")      |let w:netrw_bannercnt       = b:netrw_bannercnt      |endif
+  if exists("b:netrw_method")          && !exists("w:netrw_method")         |let w:netrw_method          = b:netrw_method         |endif
+  if exists("b:netrw_prvdir")          && !exists("w:netrw_prvdir")         |let w:netrw_prvdir          = b:netrw_prvdir         |endif
+  if exists("b:netrw_explore_indx")    && !exists("w:netrw_explore_indx")   |let w:netrw_explore_indx    = b:netrw_explore_indx   |endif
+  if exists("b:netrw_explore_listlen") && !exists("w:netrw_explore_listlen")|let w:netrw_explore_listlen = b:netrw_explore_listlen|endif
+  if exists("b:netrw_explore_mtchcnt") && !exists("w:netrw_explore_mtchcnt")|let w:netrw_explore_mtchcnt = b:netrw_explore_mtchcnt|endif
+  if exists("b:netrw_explore_bufnr")   && !exists("w:netrw_explore_bufnr")  |let w:netrw_explore_bufnr   = b:netrw_explore_bufnr  |endif
+  if exists("b:netrw_explore_line")    && !exists("w:netrw_explore_line")   |let w:netrw_explore_line    = b:netrw_explore_line   |endif
+  if exists("b:netrw_explore_list")    && !exists("w:netrw_explore_list")   |let w:netrw_explore_list    = b:netrw_explore_list   |endif
+"  call Dret("s:UseBufWinVars")
+endfun
+
+" ---------------------------------------------------------------------
+" s:WinPath: {{{2
+fun! s:WinPath(path)
+"  call Dfunc("s:WinPath(path<".a:path.">)")
+  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+   " remove trailing slash (Win95)
+   let path = substitute(a:path, '\(\\\|/\)$', '', 'g')
+   " remove escaped spaces
+   let path = substitute(path, '\ ', ' ', 'g')
+   " convert slashes to backslashes
+   let path = substitute(path, '/', '\', 'g')
+  else
+   let path= a:path
+  endif
+"  call Dret("s:WinPath <".path.">")
+  return path
+endfun
+
+" ---------------------------------------------------------------------
+" Settings Restoration: {{{2
+let &cpo= s:keepcpo
+unlet s:keepcpo
+
+" ------------------------------------------------------------------------
+" Modelines: {{{1
+" vim:ts=8 fdm=marker
diff --git a/vimfiles/autoload/netrwSettings.vim b/vimfiles/autoload/netrwSettings.vim
index 40829a1..acbd145 100644
--- a/vimfiles/autoload/netrwSettings.vim
+++ b/vimfiles/autoload/netrwSettings.vim
@@ -1,210 +1,201 @@
-" netrwSettings.vim: makes netrw settings simpler
-" Date:		Mar 11, 2008
-" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	11
-" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{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,
-"               netrwSettings.vim is 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.
-"
-" 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  = "v11"
-
-" ---------------------------------------------------------------------
-" NetrwSettings: {{{1
-fun! netrwSettings#NetrwSettings()
-  " this call is here largely just to insure that netrw has been loaded
-  call netrw#NetrwSavePosn()
-  if !exists("g:loaded_netrw")
-   echohl WarningMsg | echomsg "***sorry*** netrw needs to be loaded prior to using NetrwSettings" | echohl None
-   return
-  endif
-
-  above wincmd s
-  enew
-  setlocal noswapfile bh=wipe
-  set ft=vim
-  file Netrw\ Settings
-
-  " these variables have the following default effects when they don't
-  " exist (ie. have not been set by the user in his/her .vimrc)
-  if !exists("g:netrw_liststyle")
-   let g:netrw_liststyle= 0
-   let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
-  endif
-  if !exists("g:netrw_silent")
-   let g:netrw_silent= 0
-  endif
-  if !exists("g:netrw_use_nt_rcp")
-   let g:netrw_use_nt_rcp= 0
-  endif
-  if !exists("g:netrw_ftp")
-   let g:netrw_ftp= 0
-  endif
-  if !exists("g:netrw_ignorenetrc")
-   let g:netrw_ignorenetrc= 0
-  endif
-
-  put ='+ ---------------------------------------------'
-  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
-  put ='+ Press <F1> with cursor atop any line for help'
-  put ='+ ---------------------------------------------'
-  let s:netrw_settings_stop= line(".")
-
-  put =''
-  put ='+ Netrw Protocol Commands'
-  put = 'let g:netrw_dav_cmd           = '.g:netrw_dav_cmd
-  put = 'let g:netrw_fetch_cmd         = '.g:netrw_fetch_cmd
-  put = 'let g:netrw_ftp_cmd           = '.g:netrw_ftp_cmd
-  put = 'let g:netrw_http_cmd          = '.g:netrw_http_cmd
-  put = 'let g:netrw_rcp_cmd           = '.g:netrw_rcp_cmd
-  put = 'let g:netrw_rsync_cmd         = '.g:netrw_rsync_cmd
-  put = 'let g:netrw_scp_cmd           = '.g:netrw_scp_cmd
-  put = 'let g:netrw_sftp_cmd          = '.g:netrw_sftp_cmd
-  put = 'let g:netrw_ssh_cmd           = '.g:netrw_ssh_cmd
-  let s:netrw_protocol_stop= line(".")
-  put = ''
-
-  put ='+Netrw Transfer Control'
-  put = 'let g:netrw_cygwin            = '.g:netrw_cygwin
-  put = 'let g:netrw_ftp               = '.g:netrw_ftp
-  put = 'let g:netrw_ftpmode           = '.g:netrw_ftpmode
-  put = 'let g:netrw_ignorenetrc       = '.g:netrw_ignorenetrc
-  put = 'let g:netrw_sshport           = '.g:netrw_sshport
-  let shqline= line("$")
-  put = 'let g:netrw_shq...'
-  put = 'let g:netrw_use_nt_rcp        = '.g:netrw_use_nt_rcp
-  put = 'let g:netrw_win95ftp          = '.g:netrw_win95ftp
-  let s:netrw_xfer_stop= line(".")
-  put =''
-  put ='+ Netrw Messages'
-  put ='let g:netrw_use_errorwindow    = '.g:netrw_use_errorwindow
-
-  put = ''
-  put ='+ Netrw Browser Control'
-  put = 'let g:netrw_alto              = '.g:netrw_alto
-  put = 'let g:netrw_altv              = '.g:netrw_altv
-  put = 'let g:netrw_browse_split      = '.g:netrw_browse_split
-  if exists("g:netrw_browsex_viewer")
-   put = 'let g:netrw_browsex_viewer    = '.g:netrw_browsex_viewer
-  else
-   put = 'let g:netrw_browsex_viewer    = (not defined)'
-  endif
-  let cdescline= line("$")
-  put ='let g:netrw_cd_escape...'
-  put = 'let g:netrw_compress          = '.g:netrw_compress
-  let decompressline= line("$")
-  put ='let g:netrw_decompress...'
-  put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
-  put = 'let g:netrw_fastbrowse        = '.g:netrw_fastbrowse
-  let fnameescline= line("$")
-  put = 'let g:netrw_fname_escape...'
-  put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
-  put = 'let g:netrw_ftp_list_cmd      = '.g:netrw_ftp_list_cmd
-  put = 'let g:netrw_ftp_sizelist_cmd  = '.g:netrw_ftp_sizelist_cmd
-  put = 'let g:netrw_ftp_timelist_cmd  = '.g:netrw_ftp_timelist_cmd
-  let globescline= line("$")
-  put ='let g:netrw_glob_escape...'
-  put = 'let g:netrw_hide              = '.g:netrw_hide
-  put = 'let g:netrw_keepdir           = '.g:netrw_keepdir
-  put = 'let g:netrw_list_cmd          = '.g:netrw_list_cmd
-  put = 'let g:netrw_list_hide         = '.g:netrw_list_hide
-  put = 'let g:netrw_liststyle         = '.g:netrw_liststyle
-  put = 'let g:netrw_localcopycmd      = '.g:netrw_localcopycmd
-  put = 'let g:netrw_local_mkdir       = '.g:netrw_local_mkdir
-  put = 'let g:netrw_localmovecmd      = '.g:netrw_localmovecmd
-  put = 'let g:netrw_local_rmdir       = '.g:netrw_local_rmdir
-  put = 'let g:netrw_maxfilenamelen    = '.g:netrw_maxfilenamelen
-  put = 'let g:netrw_menu              = '.g:netrw_menu
-  put = 'let g:netrw_mkdir_cmd         = '.g:netrw_mkdir_cmd
-  put = 'let g:netrw_preview           = '.g:netrw_preview
-  put = 'let g:netrw_rename_cmd        = '.g:netrw_rename_cmd
-  put = 'let g:netrw_retmap            = '.g:netrw_retmap
-  put = 'let g:netrw_rm_cmd            = '.g:netrw_rm_cmd
-  put = 'let g:netrw_rmdir_cmd         = '.g:netrw_rmdir_cmd
-  put = 'let g:netrw_rmf_cmd           = '.g:netrw_rmf_cmd
-  put = 'let g:netrw_silent            = '.g:netrw_silent
-  put = 'let g:netrw_sort_by           = '.g:netrw_sort_by
-  put = 'let g:netrw_sort_direction    = '.g:netrw_sort_direction
-  put = 'let g:netrw_sort_sequence     = '.g:netrw_sort_sequence
-  put = 'let g:netrw_special_syntax    = '.g:netrw_special_syntax
-  put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
-  put = 'let g:netrw_scpport           = '.g:netrw_scpport
-  put = 'let g:netrw_sshport           = '.g:netrw_sshport
-  put = 'let g:netrw_timefmt           = '.g:netrw_timefmt
-  let tmpfileescline= line("$")
-  put ='let g:netrw_tmpfile_escape...'
-  put = 'let g:netrw_use_noswf         = '.g:netrw_use_noswf
-  put = 'let g:netrw_winsize           = '.g:netrw_winsize
-
-  put =''
-  put ='+ For help, place cursor on line and press <F1>'
-
-  1d
-  silent %s/^+/"/e
-  res 99
-  silent %s/= \([^0-9].*\)$/= '\1'/e
-  silent %s/= $/= ''/e
-  1
-
-  " Put in g:netrw_shq setting and g:netrw_cd_escape
-  " (deferred so as to avoid the quote manipulation just preceding)
-  if g:netrw_shq == "'"
-   call setline(shqline,      'let g:netrw_shq               = "'.g:netrw_shq.'"')
-  else
-   call setline(shqline,      "let g:netrw_shq               = '".g:netrw_shq."'")
-  endif
-  call setline(cdescline,     "let g:netrw_cd_escape         = ".'"'.escape(g:netrw_cd_escape,'\"').'"')
-  call setline(decompressline,"let g:netrw_decompress        = ".substitute(string(g:netrw_decompress),"^'\\(.*\\)'$",'\1',''))
-  call setline(fnameescline,  "let g:netrw_fname_escape      = '".escape(g:netrw_fname_escape,"'")."'")
-  call setline(globescline,   "let g:netrw_glob_escape       = '".escape(g:netrw_glob_escape,"'")."'")
-  call setline(tmpfileescline,"let g:netrw_tmpfile_escape    = '".escape(g:netrw_tmpfile_escape,"'")."'")
-
-  set nomod
-
-  nmap <buffer> <silent> <F1>                       :call NetrwSettingHelp()<cr>
-  nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call NetrwSettingHelp()<cr>
-  let tmpfile= tempname()
-  exe 'au BufWriteCmd	Netrw\ Settings	silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod'
-endfun
-
-" ---------------------------------------------------------------------
-" NetrwSettingHelp: {{{2
-fun! NetrwSettingHelp()
-"  call Dfunc("NetrwSettingHelp()")
-  let curline = getline(".")
-  if curline =~ '='
-   let varhelp = substitute(curline,'^\s*let ','','e')
-   let varhelp = substitute(varhelp,'\s*=.*$','','e')
-"   call Decho("trying help ".varhelp)
-   try
-    exe "he ".varhelp
-   catch /^Vim\%((\a\+)\)\=:E149/
-   	echo "***sorry*** no help available for <".varhelp.">"
-   endtry
-  elseif line(".") < s:netrw_settings_stop
-   he netrw-settings
-  elseif line(".") < s:netrw_protocol_stop
-   he netrw-externapp
-  elseif line(".") < s:netrw_xfer_stop
-   he netrw-variables
-  else
-   he netrw-browse-var
-  endif
-"  call Dret("NetrwSettingHelp")
-endfun
-
-" ---------------------------------------------------------------------
-" Modelines: {{{1
-" vim:ts=8 fdm=marker
+" netrwSettings.vim: makes netrw settings simpler
+" Date:		Sep 03, 2008
+" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+" Version:	13
+" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{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,
+"               netrwSettings.vim is 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.
+"
+" 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  = "v13"
+
+" ---------------------------------------------------------------------
+" NetrwSettings: {{{1
+fun! netrwSettings#NetrwSettings()
+  " this call is here largely just to insure that netrw has been loaded
+  call netrw#NetrwSavePosn()
+  if !exists("g:loaded_netrw")
+   echohl WarningMsg | echomsg "***sorry*** netrw needs to be loaded prior to using NetrwSettings" | echohl None
+   return
+  endif
+
+  above wincmd s
+  enew
+  setlocal noswapfile bh=wipe
+  set ft=vim
+  file Netrw\ Settings
+
+  " these variables have the following default effects when they don't
+  " exist (ie. have not been set by the user in his/her .vimrc)
+  if !exists("g:netrw_liststyle")
+   let g:netrw_liststyle= 0
+   let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
+  endif
+  if !exists("g:netrw_silent")
+   let g:netrw_silent= 0
+  endif
+  if !exists("g:netrw_use_nt_rcp")
+   let g:netrw_use_nt_rcp= 0
+  endif
+  if !exists("g:netrw_ftp")
+   let g:netrw_ftp= 0
+  endif
+  if !exists("g:netrw_ignorenetrc")
+   let g:netrw_ignorenetrc= 0
+  endif
+
+  put ='+ ---------------------------------------------'
+  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
+  put ='+ Press <F1> with cursor atop any line for help'
+  put ='+ ---------------------------------------------'
+  let s:netrw_settings_stop= line(".")
+
+  put =''
+  put ='+ Netrw Protocol Commands'
+  put = 'let g:netrw_dav_cmd           = '.g:netrw_dav_cmd
+  put = 'let g:netrw_fetch_cmd         = '.g:netrw_fetch_cmd
+  put = 'let g:netrw_ftp_cmd           = '.g:netrw_ftp_cmd
+  put = 'let g:netrw_http_cmd          = '.g:netrw_http_cmd
+  put = 'let g:netrw_rcp_cmd           = '.g:netrw_rcp_cmd
+  put = 'let g:netrw_rsync_cmd         = '.g:netrw_rsync_cmd
+  put = 'let g:netrw_scp_cmd           = '.g:netrw_scp_cmd
+  put = 'let g:netrw_sftp_cmd          = '.g:netrw_sftp_cmd
+  put = 'let g:netrw_ssh_cmd           = '.g:netrw_ssh_cmd
+  let s:netrw_protocol_stop= line(".")
+  put = ''
+
+  put ='+Netrw Transfer Control'
+  put = 'let g:netrw_cygwin            = '.g:netrw_cygwin
+  put = 'let g:netrw_ftp               = '.g:netrw_ftp
+  put = 'let g:netrw_ftpmode           = '.g:netrw_ftpmode
+  put = 'let g:netrw_ignorenetrc       = '.g:netrw_ignorenetrc
+  put = 'let g:netrw_sshport           = '.g:netrw_sshport
+  put = 'let g:netrw_use_nt_rcp        = '.g:netrw_use_nt_rcp
+  put = 'let g:netrw_win95ftp          = '.g:netrw_win95ftp
+  let s:netrw_xfer_stop= line(".")
+  put =''
+  put ='+ Netrw Messages'
+  put ='let g:netrw_use_errorwindow    = '.g:netrw_use_errorwindow
+
+  put = ''
+  put ='+ Netrw Browser Control'
+  put = 'let g:netrw_alto              = '.g:netrw_alto
+  put = 'let g:netrw_altv              = '.g:netrw_altv
+  put = 'let g:netrw_browse_split      = '.g:netrw_browse_split
+  if exists("g:netrw_browsex_viewer")
+   put = 'let g:netrw_browsex_viewer    = '.g:netrw_browsex_viewer
+  else
+   put = 'let g:netrw_browsex_viewer    = (not defined)'
+  endif
+  put = 'let g:netrw_compress          = '.g:netrw_compress
+  put = 'let g:netrw_cursorline        = '.g:netrw_cursorline
+  let decompressline= line("$")
+  put ='let g:netrw_decompress...'
+  put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
+  put = 'let g:netrw_fastbrowse        = '.g:netrw_fastbrowse
+  let fnameescline= line("$")
+  put = 'let g:netrw_fname_escape...'
+  put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
+  put = 'let g:netrw_ftp_list_cmd      = '.g:netrw_ftp_list_cmd
+  put = 'let g:netrw_ftp_sizelist_cmd  = '.g:netrw_ftp_sizelist_cmd
+  put = 'let g:netrw_ftp_timelist_cmd  = '.g:netrw_ftp_timelist_cmd
+  let globescline= line("$")
+  put ='let g:netrw_glob_escape...'
+  put = 'let g:netrw_hide              = '.g:netrw_hide
+  put = 'let g:netrw_keepdir           = '.g:netrw_keepdir
+  put = 'let g:netrw_list_cmd          = '.g:netrw_list_cmd
+  put = 'let g:netrw_list_hide         = '.g:netrw_list_hide
+  put = 'let g:netrw_liststyle         = '.g:netrw_liststyle
+  put = 'let g:netrw_localcopycmd      = '.g:netrw_localcopycmd
+  put = 'let g:netrw_local_mkdir       = '.g:netrw_local_mkdir
+  put = 'let g:netrw_localmovecmd      = '.g:netrw_localmovecmd
+  put = 'let g:netrw_local_rmdir       = '.g:netrw_local_rmdir
+  put = 'let g:netrw_maxfilenamelen    = '.g:netrw_maxfilenamelen
+  put = 'let g:netrw_menu              = '.g:netrw_menu
+  put = 'let g:netrw_mkdir_cmd         = '.g:netrw_mkdir_cmd
+  put = 'let g:netrw_preview           = '.g:netrw_preview
+  put = 'let g:netrw_rename_cmd        = '.g:netrw_rename_cmd
+  put = 'let g:netrw_retmap            = '.g:netrw_retmap
+  put = 'let g:netrw_rm_cmd            = '.g:netrw_rm_cmd
+  put = 'let g:netrw_rmdir_cmd         = '.g:netrw_rmdir_cmd
+  put = 'let g:netrw_rmf_cmd           = '.g:netrw_rmf_cmd
+  put = 'let g:netrw_silent            = '.g:netrw_silent
+  put = 'let g:netrw_sort_by           = '.g:netrw_sort_by
+  put = 'let g:netrw_sort_direction    = '.g:netrw_sort_direction
+  put = 'let g:netrw_sort_options      = '.g:netrw_sort_options
+  put = 'let g:netrw_sort_sequence     = '.g:netrw_sort_sequence
+  put = 'let g:netrw_special_syntax    = '.g:netrw_special_syntax
+  put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
+  put = 'let g:netrw_scpport           = '.g:netrw_scpport
+  put = 'let g:netrw_sshport           = '.g:netrw_sshport
+  put = 'let g:netrw_timefmt           = '.g:netrw_timefmt
+  let tmpfileescline= line("$")
+  put ='let g:netrw_tmpfile_escape...'
+  put = 'let g:netrw_use_noswf         = '.g:netrw_use_noswf
+  put = 'let g:netrw_xstrlen           = '.g:netrw_xstrlen
+  put = 'let g:netrw_winsize           = '.g:netrw_winsize
+
+  put =''
+  put ='+ For help, place cursor on line and press <F1>'
+
+  1d
+  silent %s/^+/"/e
+  res 99
+  silent %s/= \([^0-9].*\)$/= '\1'/e
+  silent %s/= $/= ''/e
+  1
+
+  call setline(decompressline,"let g:netrw_decompress        = ".substitute(string(g:netrw_decompress),"^'\\(.*\\)'$",'\1',''))
+  call setline(fnameescline,  "let g:netrw_fname_escape      = '".escape(g:netrw_fname_escape,"'")."'")
+  call setline(globescline,   "let g:netrw_glob_escape       = '".escape(g:netrw_glob_escape,"'")."'")
+  call setline(tmpfileescline,"let g:netrw_tmpfile_escape    = '".escape(g:netrw_tmpfile_escape,"'")."'")
+
+  set nomod
+
+  nmap <buffer> <silent> <F1>                       :call NetrwSettingHelp()<cr>
+  nnoremap <buffer> <silent> <leftmouse> <leftmouse>:call NetrwSettingHelp()<cr>
+  let tmpfile= tempname()
+  exe 'au BufWriteCmd	Netrw\ Settings	silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod'
+endfun
+
+" ---------------------------------------------------------------------
+" NetrwSettingHelp: {{{2
+fun! NetrwSettingHelp()
+"  call Dfunc("NetrwSettingHelp()")
+  let curline = getline(".")
+  if curline =~ '='
+   let varhelp = substitute(curline,'^\s*let ','','e')
+   let varhelp = substitute(varhelp,'\s*=.*$','','e')
+"   call Decho("trying help ".varhelp)
+   try
+    exe "he ".varhelp
+   catch /^Vim\%((\a\+)\)\=:E149/
+   	echo "***sorry*** no help available for <".varhelp.">"
+   endtry
+  elseif line(".") < s:netrw_settings_stop
+   he netrw-settings
+  elseif line(".") < s:netrw_protocol_stop
+   he netrw-externapp
+  elseif line(".") < s:netrw_xfer_stop
+   he netrw-variables
+  else
+   he netrw-browse-var
+  endif
+"  call Dret("NetrwSettingHelp")
+endfun
+
+" ---------------------------------------------------------------------
+" Modelines: {{{1
+" vim:ts=8 fdm=marker
diff --git a/vimfiles/autoload/tcomment.vim b/vimfiles/autoload/tcomment.vim
new file mode 100644
index 0000000..3fbe817
--- /dev/null
+++ b/vimfiles/autoload/tcomment.vim
@@ -0,0 +1,557 @@
+" tcomment.vim
+" @Author:      Thomas Link (mailto:micathom AT gmail com?subject=[vim])
+" @Website:     http://www.vim.org/account/profile.php?user_id=4037
+" @License:     GPL (see http://www.gnu.org/licenses/gpl.txt)
+" @Created:     2007-09-17.
+" @Last Change: 2008-05-07.
+" @Revision:    0.0.46
+
+if &cp || exists("loaded_tcomment_autoload")
+    finish
+endif
+let loaded_tcomment_autoload = 1
+
+
+function! s:DefaultValue(option)
+    exec 'let '. a:option .' = &'. a:option
+    exec 'set '. a:option .'&'
+    exec 'let default = &'. a:option
+    exec 'let &'. a:option .' = '. a:option
+    return default
+endf
+
+let s:defaultComments      = s:DefaultValue('comments')
+let s:defaultCommentString = s:DefaultValue('commentstring')
+let s:nullCommentString    = '%s'
+
+" tcomment#Comment(line1, line2, ?commentMode, ?commentAnyway, ?commentBegin, ?commentEnd)
+" commentMode:
+"   G ... guess
+"   B ... block
+"   i ... maybe inline, guess
+"   I ... inline
+"   R ... right
+"   v ... visual
+"   o ... operator
+function! tcomment#Comment(beg, end, ...)
+    " save the cursor position
+    let co = col('.')
+    let li = line('.')
+    let s:pos_end = getpos("'>")
+    let commentMode   = a:0 >= 1 ? a:1 : 'G'
+    let commentAnyway = a:0 >= 2 ? (a:2 == '!') : 0
+    " TLogVAR a:beg, a:end, a:1, commentMode, commentAnyway
+    if commentMode =~# 'i'
+        let commentMode = substitute(commentMode, '\Ci', line("'<") == line("'>") ? 'I' : 'G', 'g')
+    endif
+    if commentMode =~# 'R' || commentMode =~# 'I'
+        let cstart = col("'<")
+        if cstart == 0
+            let cstart = col('.')
+        endif
+        if commentMode =~# 'R'
+            let commentMode = substitute(commentMode, '\CR', 'G', 'g')
+            let cend = 0
+        else
+            let cend = col("'>")
+            if commentMode =~# 'o'
+                let cend += 1
+            endif
+        endif
+    else
+        let cstart = 0
+        let cend   = 0
+    endif
+    " TLogVAR commentMode, cstart, cend
+    " get the correct commentstring
+    if a:0 >= 3 && a:3 != ''
+        let cms = s:EncodeCommentPart(a:3) .'%s'
+        if a:0 >= 4 && a:4 != ''
+            let cms = cms . s:EncodeCommentPart(a:4)
+        endif
+    else
+        let [cms, commentMode] = s:GetCommentString(a:beg, a:end, commentMode)
+    endif
+    let cms0 = s:BlockGetCommentString(cms)
+    let cms0 = escape(cms0, '\')
+    " make whitespace optional; this conflicts with comments that require some 
+    " whitespace
+    let cmtCheck = substitute(cms0, '\([	 ]\)', '\1\\?', 'g')
+    " turn commentstring into a search pattern
+    let cmtCheck = s:SPrintF(cmtCheck, '\(\_.\{-}\)')
+    " set commentMode and indentStr
+    let [indentStr, uncomment] = s:CommentDef(a:beg, a:end, cmtCheck, commentMode, cstart, cend)
+    " TLogVAR indentStr, uncomment
+    if commentAnyway
+        let uncomment = 0
+    endif
+    " go
+    if commentMode =~# 'B'
+        " We want a comment block
+        call s:CommentBlock(a:beg, a:end, uncomment, cmtCheck, cms, indentStr)
+    else
+        " We want commented lines
+        " final search pattern for uncommenting
+        let cmtCheck   = escape('\V\^\(\s\{-}\)'. cmtCheck .'\$', '"/\')
+        " final pattern for commenting
+        let cmtReplace = escape(cms0, '"/')
+        silent exec a:beg .','. a:end .'s/\V'. 
+                    \ s:StartRx(cstart) . indentStr .'\zs\(\.\{-}\)'. s:EndRx(cend) .'/'.
+                    \ '\=s:ProcessedLine('. uncomment .', submatch(0), "'. cmtCheck .'", "'. cmtReplace .'")/ge'
+    endif
+    " reposition cursor
+    " TLogVAR commentMode
+    if commentMode =~ '>'
+        call setpos('.', s:pos_end)
+    else
+        " TLogVAR li, co
+        call cursor(li, co)
+    endif
+endf
+
+
+function! tcomment#Operator(type, ...) "{{{3
+    let commentMode = a:0 >= 1 ? a:1 : ''
+    let bang = a:0 >= 2 ? a:2 : ''
+    let sel_save = &selection
+    let &selection = "inclusive"
+    let reg_save = @@
+    " let pos = getpos('.')
+    " TLogVAR a:type
+    try
+        if a:type == 'line'
+            silent exe "normal! '[V']"
+            let commentMode1 = 'G'
+        elseif a:type == 'block'
+            silent exe "normal! `[\<C-V>`]"
+            let commentMode1 = 'I'
+        else
+            silent exe "normal! `[v`]"
+            let commentMode1 = 'i'
+        endif
+        if empty(commentMode)
+            let commentMode = commentMode1
+        endif
+        let beg = line("'[")
+        let end = line("']")
+        norm! 
+        let commentMode .= g:tcommentOpModeExtra
+        call tcomment#Comment(beg, end, commentMode.'o', bang)
+    finally
+        let &selection = sel_save
+        let @@ = reg_save
+        if g:tcommentOpModeExtra !~ '>'
+            " TLogVAR pos
+            " call setpos('.', pos)
+            call setpos('.', w:tcommentPos)
+            unlet! w:tcommentPos
+        endif
+    endtry
+endf
+
+
+function! tcomment#OperatorLine(type) "{{{3
+    call tcomment#Operator(a:type, 'G')
+endf
+
+
+function! tcomment#OperatorAnyway(type) "{{{3
+    call tcomment#Operator(a:type, '', '!')
+endf
+
+
+function! tcomment#OperatorLineAnyway(type) "{{{3
+    call tcomment#Operator(a:type, 'G', '!')
+endf
+
+
+" comment text as if it were of a specific filetype
+function! tcomment#CommentAs(beg, end, commentAnyway, filetype, ...)
+    let ccount = a:0 >= 1 ? a:1 : 1
+    " TLogVAR ccount
+    if a:filetype =~ '_block$'
+        let commentMode = 'B'
+        let ft = substitute(a:filetype, '_block$', '', '')
+    elseif a:filetype =~ '_inline$'
+        let commentMode = 'I'
+        let ft = substitute(a:filetype, '_inline$', '', '')
+    else 
+        let commentMode = 'G'
+        let ft = a:filetype
+    endif
+    let [cms, commentMode] = s:GetCommentString(a:beg, a:end, commentMode, ft)
+    let pre  = substitute(cms, '%s.*$', '', '')
+    let pre  = substitute(pre, '%%', '%', 'g')
+    let post = substitute(cms, '^.\{-}%s', '', '')
+    let post = substitute(post, '%%', '%', 'g')
+    if ccount > 1
+        let pre_l = matchlist(pre, '^\(\S\+\)\(.*\)$')
+        " TLogVAR pre_l
+        if !empty(get(pre_l, 1))
+            let pre  = repeat(pre_l[1], ccount) . pre_l[2]
+        endif
+        let post_l = matchlist(post, '^\(\s*\)\(.\+\)$')
+        " TLogVAR post_l
+        if !empty(get(post_l, 2))
+            let post = post_l[1] . repeat(post_l[2], ccount)
+        endif
+    endif
+    keepjumps call tcomment#Comment(a:beg, a:end, commentMode, a:commentAnyway, pre, post)
+endf
+
+
+" ----------------------------------------------------------------
+" collect all variables matching ^tcomment_
+function! tcomment#CollectFileTypes()
+    if g:tcommentFileTypesDirty
+        redir => vars
+        silent let
+        redir END
+        let g:tcommentFileTypes = split(vars, '\n')
+        call filter(g:tcommentFileTypes, 'v:val =~ "tcomment_"')
+        call map(g:tcommentFileTypes, 'matchstr(v:val, ''tcomment_\zs\S\+'')')
+        call sort(g:tcommentFileTypes)
+        let g:tcommentFileTypesRx = '\V\^\('. join(g:tcommentFileTypes, '\|') .'\)\(\u\.\*\)\?\$'
+        let g:tcommentFileTypesDirty = 0
+    endif
+endf
+
+call tcomment#CollectFileTypes()
+
+" return a list of filetypes for which a tcomment_{&ft} is defined
+function! tcomment#FileTypes(ArgLead, CmdLine, CursorPos)
+    " TLogVAR a:ArgLead, a:CmdLine, a:CursorPos
+    call tcomment#CollectFileTypes()
+    let types = copy(g:tcommentFileTypes)
+    if index(g:tcommentFileTypes, &filetype) != -1
+        " TLogVAR &filetype
+        call insert(types, &filetype)
+    endif
+    if empty(a:ArgLead)
+        return types
+    else
+        return filter(types, 'v:val =~ ''\V''.a:ArgLead')
+    endif
+endf
+
+function! s:EncodeCommentPart(string)
+    return substitute(a:string, '%', '%%', 'g')
+endf
+
+" s:GetCommentString(beg, end, commentMode, ?filetype="")
+function! s:GetCommentString(beg, end, commentMode, ...)
+    let ft = a:0 >= 1 ? a:1 : ''
+    if ft != ''
+        let [cms, commentMode] = s:GetCustomCommentString(ft, a:commentMode)
+    else
+        let cms = ''
+        let commentMode = a:commentMode
+    endif
+    if empty(cms)
+        if exists('b:commentstring')
+            let cms = b:commentstring
+            return s:GetCustomCommentString(&filetype, a:commentMode, cms)
+        elseif exists('b:commentStart') && b:commentStart != ''
+            let cms = s:EncodeCommentPart(b:commentStart) .' %s'
+            if exists('b:commentEnd') && b:commentEnd != ''
+                let cms = cms .' '. s:EncodeCommentPart(b:commentEnd)
+            endif
+            return s:GetCustomCommentString(&filetype, a:commentMode, cms)
+        elseif g:tcommentGuessFileType || (exists('g:tcommentGuessFileType_'. &filetype) 
+                    \ && g:tcommentGuessFileType_{&filetype} =~ '[^0]')
+            if g:tcommentGuessFileType_{&filetype} == 1
+                let altFiletype = ''
+            else
+                let altFiletype = g:tcommentGuessFileType_{&filetype}
+            endif
+            return s:GuessFileType(a:beg, a:end, a:commentMode, &filetype, altFiletype)
+        else
+            return s:GetCustomCommentString(&filetype, a:commentMode, s:GuessCurrentCommentString(a:commentMode))
+        endif
+    endif
+    return [cms, commentMode]
+endf
+
+" s:SPrintF(formatstring, ?values ...)
+" => string
+function! s:SPrintF(string, ...)
+    let n = 1
+    let r = ''
+    let s = a:string
+    while 1
+        let i = match(s, '%\(.\)')
+        if i >= 0
+            let x = s[i + 1]
+            let r = r . strpart(s, 0, i)
+            let s = strpart(s, i + 2)
+            if x == '%'
+                let r = r.'%'
+            else
+                if a:0 >= n
+                    let v = a:{n}
+                    let n = n + 1
+                else
+                    echoerr 'Malformed format string (too many arguments required): '. a:string
+                endif
+                if x ==# 's'
+                    let r = r.v
+                elseif x ==# 'S'
+                    let r = r.'"'.v.'"'
+                else
+                    echoerr 'Malformed format string: '. a:string
+                endif
+            endif
+        else
+            return r.s
+        endif
+    endwh
+endf
+
+function! s:StartRx(pos)
+    if a:pos == 0
+        return '\^'
+    else
+        return '\%'. a:pos .'c'
+    endif
+endf
+
+function! s:EndRx(pos)
+    if a:pos == 0
+        return '\$'
+    else
+        return '\%'. a:pos .'c'
+    endif
+endf
+
+function! s:GetIndentString(line, start)
+    let start = a:start > 0 ? a:start - 1 : 0
+    return substitute(strpart(getline(a:line), start), '\V\^\s\*\zs\.\*\$', '', '')
+endf
+
+function! s:CommentDef(beg, end, checkRx, commentMode, cstart, cend)
+    let mdrx = '\V'. s:StartRx(a:cstart) .'\s\*'. a:checkRx .'\s\*'. s:EndRx(0)
+    let line = getline(a:beg)
+    if a:cstart != 0 && a:cend != 0
+        let line = strpart(line, 0, a:cend - 1)
+    endif
+    let uncomment = (line =~ mdrx)
+    let it = s:GetIndentString(a:beg, a:cstart)
+    let il = indent(a:beg)
+    let n  = a:beg + 1
+    while n <= a:end
+        if getline(n) =~ '\S'
+            let jl = indent(n)
+            if jl < il
+                let it = s:GetIndentString(n, a:cstart)
+                let il = jl
+            endif
+            if a:commentMode =~# 'G'
+                if !(getline(n) =~ mdrx)
+                    let uncomment = 0
+                endif
+            endif
+        endif
+        let n = n + 1
+    endwh
+    if a:commentMode =~# 'B'
+        let t = @t
+        try
+            silent exec 'norm! '. a:beg.'G1|v'.a:end.'G$"ty'
+            let uncomment = (@t =~ mdrx)
+        finally
+            let @t = t
+        endtry
+    endif
+    return [it, uncomment]
+endf
+
+function! s:ProcessedLine(uncomment, match, checkRx, replace)
+    if !(a:match =~ '\S' || g:tcommentBlankLines)
+        return a:match
+    endif
+    let ml = len(a:match)
+    if a:uncomment
+        let rv = substitute(a:match, a:checkRx, '\1\2', '')
+    else
+        let rv = s:SPrintF(a:replace, a:match)
+    endif
+    " let md = len(rv) - ml
+    let s:pos_end = getpos('.')
+    let s:pos_end[2] += len(rv)
+    " TLogVAR pe, md, a:match
+    let rv = escape(rv, '\
')
+    let rv = substitute(rv, '\n', '\\\n', 'g')
+    return rv
+endf
+
+function! s:CommentBlock(beg, end, uncomment, checkRx, replace, indentStr)
+    let t = @t
+    try
+        silent exec 'norm! '. a:beg.'G1|v'.a:end.'G$"td'
+        let ms = s:BlockGetMiddleString(a:replace)
+        let mx = escape(ms, '\')
+        if a:uncomment
+            let @t = substitute(@t, '\V\^\s\*'. a:checkRx .'\$', '\1', '')
+            if ms != ''
+                let @t = substitute(@t, '\V\n'. a:indentStr . mx, '\n'. a:indentStr, 'g')
+            endif
+            let @t = substitute(@t, '^\n', '', '')
+            let @t = substitute(@t, '\n\s*$', '', '')
+        else
+            let cs = s:BlockGetCommentString(a:replace)
+            let cs = a:indentStr . substitute(cs, '%s', '%s'. a:indentStr, '')
+            if ms != ''
+                let ms = a:indentStr . ms
+                let mx = a:indentStr . mx
+                let @t = substitute(@t, '^'. a:indentStr, '', 'g')
+                let @t = ms . substitute(@t, '\n'. a:indentStr, '\n'. mx, 'g')
+            endif
+            let @t = s:SPrintF(cs, "\n". @t ."\n")
+        endif
+        silent norm! "tP
+    finally
+        let @t = t
+    endtry
+endf
+
+" inspired by Meikel Brandmeyer's EnhancedCommentify.vim
+" this requires that a syntax names are prefixed by the filetype name 
+" s:GuessFileType(beg, end, commentMode, filetype, ?fallbackFiletype)
+function! s:GuessFileType(beg, end, commentMode, filetype, ...)
+    if a:0 >= 1 && a:1 != ''
+        let [cms, commentMode] = s:GetCustomCommentString(a:1, a:commentMode)
+        if cms == ''
+            let cms = s:GuessCurrentCommentString(a:commentMode)
+        endif
+    else
+        let commentMode = s:CommentMode(a:commentMode, 'G')
+        let cms = s:GuessCurrentCommentString(0)
+    endif
+    let n  = a:beg
+    while n <= a:end
+        let m  = indent(n) + 1
+        let le = col('$')
+        while m < le
+            let syntaxName = synIDattr(synID(n, m, 1), 'name')
+            let ftypeMap   = get(g:tcommentSyntaxMap, syntaxName)
+            if !empty(ftypeMap)
+                return s:GetCustomCommentString(ftypeMap, a:commentMode, cms)
+            elseif syntaxName =~ g:tcommentFileTypesRx
+                let ft = substitute(syntaxName, g:tcommentFileTypesRx, '\1', '')
+                if exists('g:tcommentIgnoreTypes_'. a:filetype) && g:tcommentIgnoreTypes_{a:filetype} =~ '\<'.ft.'\>'
+                    let m = m + 1
+                else
+                    return s:GetCustomCommentString(ft, a:commentMode, cms)
+                endif
+            elseif syntaxName == '' || syntaxName == 'None' || syntaxName =~ '^\u\+$' || syntaxName =~ '^\u\U*$'
+                let m = m + 1
+            else
+                break
+            endif
+        endwh
+        let n = n + 1
+    endwh
+    return [cms, commentMode]
+endf
+
+function! s:CommentMode(commentMode, newmode) "{{{3
+    return substitute(a:commentMode, '\w\+', a:newmode, 'g')
+endf
+
+function! s:GuessCurrentCommentString(commentMode)
+    let valid_cms = (stridx(&commentstring, '%s') != -1)
+    if &commentstring != s:defaultCommentString && valid_cms
+        " The &commentstring appears to have been set and to be valid
+        return &commentstring
+    endif
+    if &comments != s:defaultComments
+        " the commentstring is the default one, so we assume that it wasn't 
+        " explicitly set; we then try to reconstruct &cms from &comments
+        let cms = s:ConstructFromComments(a:commentMode)
+        if cms != s:nullCommentString
+            return cms
+        endif
+    endif
+    if valid_cms
+        " Before &commentstring appeared not to be set. As we don't know 
+        " better we return it anyway if it is valid
+        return &commentstring
+    else
+        " &commentstring is invalid. So we return the identity string.
+        return s:nullCommentString
+    endif
+endf
+
+function! s:ConstructFromComments(commentMode)
+    exec s:ExtractCommentsPart('')
+    if a:commentMode =~# 'G' && line != ''
+        return line .' %s'
+    endif
+    exec s:ExtractCommentsPart('s')
+    if s != ''
+        exec s:ExtractCommentsPart('e')
+        " if a:commentMode
+        "     exec s:ExtractCommentsPart("m")
+        "     if m != ""
+        "         let m = "\n". m
+        "     endif
+        "     return s.'%s'.e.m
+        " else
+        return s.' %s '.e
+        " endif
+    endif
+    if line != ''
+        return line .' %s'
+    else
+        return s:nullCommentString
+    endif
+endf
+
+function! s:ExtractCommentsPart(key)
+    " let key   = a:key != "" ? a:key .'[^:]*' : ""
+    let key = a:key . '[bnflrxO0-9-]*'
+    let val = substitute(&comments, '^\(.\{-},\)\{-}'. key .':\([^,]\+\).*$', '\2', '')
+    if val == &comments
+        let val = ''
+    else
+        let val = substitute(val, '%', '%%', 'g')
+    endif
+    let var = a:key == '' ? 'line' : a:key
+    return 'let '. var .'="'. escape(val, '"') .'"'
+endf
+
+" s:GetCustomCommentString(ft, commentMode, ?default="")
+function! s:GetCustomCommentString(ft, commentMode, ...)
+    let commentMode   = a:commentMode
+    let customComment = exists('g:tcomment_'. a:ft)
+    if commentMode =~# 'B' && exists('g:tcomment_'. a:ft .'_block')
+        let cms = g:tcomment_{a:ft}_block
+    elseif commentMode =~? 'I' && exists('g:tcomment_'. a:ft .'_inline')
+        let cms = g:tcomment_{a:ft}_inline
+    elseif customComment
+        let cms = g:tcomment_{a:ft}
+        let commentMode = s:CommentMode(commentMode, 'G')
+    elseif a:0 >= 1
+        let cms = a:1
+        let commentMode = s:CommentMode(commentMode, 'G')
+    else
+        let cms = ''
+        let commentMode = s:CommentMode(commentMode, 'G')
+    endif
+    return [cms, commentMode]
+endf
+
+function! s:BlockGetCommentString(cms)
+    " return substitute(a:cms, '\n.*$', '', '')
+    return matchstr(a:cms, '^.\{-}\ze\(\n\|$\)')
+endf
+
+function! s:BlockGetMiddleString(cms)
+    " let rv = substitute(a:cms, '^.\{-}\n\([^\n]*\)', '\1', '')
+    let rv = matchstr(a:cms, '\n\zs.*')
+    return rv == a:cms ? '' : rv
+endf
+
+
+redraw
+
diff --git a/vimfiles/autoload/vimball.vim b/vimfiles/autoload/vimball.vim
index d896163..df932db 100644
--- a/vimfiles/autoload/vimball.vim
+++ b/vimfiles/autoload/vimball.vim
@@ -1,7 +1,7 @@
 " vimball.vim : construct a file containing both paths and files
 " Author:	Charles E. Campbell, Jr.
-" Date:		Apr 01, 2008
-" Version:	25
+" Date:		May 30, 2008
+" Version:	26
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
 " Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
@@ -15,7 +15,7 @@ if &cp || exists("g:loaded_vimball") || v:version < 700
  finish
 endif
 let s:keepcpo        = &cpo
-let g:loaded_vimball = "v25"
+let g:loaded_vimball = "v26"
 set cpo&vim
 "DechoTabOn
 
@@ -25,9 +25,8 @@ if !exists("s:USAGE")
  let s:USAGE   = 0
  let s:WARNING = 1
  let s:ERROR   = 2
- if exists("g:vimball_shq") && !exists("g:netrw_shq")
-  let g:netrw_shq= g:vimball_shq
- endif
+
+ " determine if cygwin is in use or not
  if !exists("g:netrw_cygwin")
   if has("win32") || has("win95") || has("win64") || has("win16")
    if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
@@ -39,6 +38,25 @@ if !exists("s:USAGE")
    let g:netrw_cygwin= 0
   endif
  endif
+
+ " set up g:vimball_mkdir if the mkdir() call isn't defined
+ if !exists("*mkdir")
+  if exists("g:netrw_local_mkdir")
+   let g:vimball_mkdir= g:netrw_local_mkdir
+  elseif executable("mkdir")
+   let g:vimball_mkdir= "mkdir"
+  elseif executable("makedir")
+   let g:vimball_mkdir= "makedir"
+  endif
+  if !exists(g:vimball_mkdir)
+   call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined")
+  endif
+ endif
+
+ " set up shell quoting character
+ if exists("g:vimball_shq") && !exists("g:netrw_shq")
+  let g:netrw_shq= g:vimball_shq
+ endif
  if !exists("g:netrw_shq")
   if exists("&shq") && &shq != ""
    let g:netrw_shq= &shq
@@ -53,6 +71,8 @@ if !exists("s:USAGE")
   endif
 " call Decho("g:netrw_shq<".g:netrw_shq.">")
  endif
+
+ " set up escape string (used to protect paths)
  if !exists("g:vimball_path_escape")
   let g:vimball_path_escape= ' ;#%'
  endif
@@ -77,7 +97,7 @@ endif
 "     [file]
 fun! vimball#MkVimball(line1,line2,writelevel,...) range
 "  call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0)
-  if a:1 =~ '.vim' || a:1 =~ '.txt'
+  if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
    let vbname= substitute(a:1,'\.\a\{3}$','.vba','')
   else
    let vbname= a:1
@@ -98,7 +118,7 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
   endif
 
   " user option bypass
-  call s:SaveSettings()
+  call vimball#SaveSettings()
 
   if a:0 >= 2
    " allow user to specify where to get the files
@@ -124,7 +144,7 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
    if !filereadable(svfile)
     call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">")
 	call s:ChgDir(curdir)
-	call s:RestoreSettings()
+	call vimball#RestoreSettings()
 "    call Dret("MkVimball")
     return
    endif
@@ -150,8 +170,8 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
 
    " write the file from the tab
    let svfilepath= s:Path(svfile,'')
-"   call Decho("exe $r ".svfilepath)
-   exe "$r ".svfilepath
+"   call Decho("exe $r ".fnameescape(svfilepath))
+   exe "$r ".fnameescape(svfilepath)
 
    call setline(lastline+1,line("$") - lastline - 1)
 "   call Decho("lastline=".lastline." line$=".line("$"))
@@ -167,12 +187,12 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
   setlocal ff=unix
   if a:writelevel
    let vbnamepath= s:Path(vbname,'')
-"   call Decho("exe w! ".vbnamepath)
-   exe "w! ".vbnamepath
+"   call Decho("exe w! ".fnameescape(vbnamepath))
+   exe "w! ".fnameescape(vbnamepath)
   else
    let vbnamepath= s:Path(vbname,'')
-"   call Decho("exe w ".vbnamepath)
-   exe "w ".vbnamepath
+"   call Decho("exe w ".fnameescape(vbnamepath))
+   exe "w ".fnameescape(vbnamepath)
   endif
 "  call Decho("Vimball<".vbname."> created")
   echo "Vimball<".vbname."> created"
@@ -183,7 +203,7 @@ fun! vimball#MkVimball(line1,line2,writelevel,...) range
   exe "tabc ".vbtabnr
 
   " restore options
-  call s:RestoreSettings()
+  call vimball#RestoreSettings()
 
 "  call Dret("MkVimball")
 endfun
@@ -202,7 +222,7 @@ fun! vimball#Vimball(really,...)
   endif
 
   " set up standard settings
-  call s:SaveSettings()
+  call vimball#SaveSettings()
   let curtabnr    = tabpagenr()
   let vimballfile = expand("%:tr")
 
@@ -262,10 +282,10 @@ fun! vimball#Vimball(really,...)
 "   call Decho("using L#".(linenr+1).": fsize=".fsize)
 
    " Allow AsNeeded/ directory to take place of plugin/ directory
-   " when AsNeeded/filename is filereadable
+   " when AsNeeded/filename is filereadable or was present in VimballRecord
    if fname =~ '\<plugin/'
    	let anfname= substitute(fname,'\<plugin/','AsNeeded/','')
-	if filereadable(anfname)
+	if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~ anfname)
 "	 call Decho("using anfname<".anfname."> instead of <".fname.">")
 	 let fname= anfname
 	endif
@@ -283,7 +303,11 @@ fun! vimball#Vimball(really,...)
 "	 call Decho("dirname<".dirname.">")
      if !isdirectory(dirname)
 "      call Decho("making <".dirname.">")
-      call mkdir(dirname)
+      if exists("g:vimball_mkdir")
+	   call system(g:vimball_mkdir." ".s:Escape(dirname))
+      else
+       call mkdir(dirname)
+      endif
 	  call s:RecordInVar(home,"rmdir('".dirname."')")
      endif
     endwhile
@@ -309,10 +333,10 @@ fun! vimball#Vimball(really,...)
    " write tab to file
    if a:really
     let fnamepath= s:Path(home."/".fname,'')
-"    call Decho("exe w! ".fnamepath)
-    exe "silent w! ".fnamepath
+"    call Decho("exe w! ".fnameescape(fnamepath))
+	exe "silent w! ".fnameescape(fnamepath)
     echo "wrote ".fnamepath
-	call s:RecordInVar(home,"call delete('".fnamepath."')")
+	call s:RecordInVar(home,"call delete('".fnameescape(fnamepath)."')")
    endif
 
    " return to tab with vimball
@@ -354,7 +378,7 @@ fun! vimball#Vimball(really,...)
   setlocal nomod bh=wipe
   exe "tabn ".curtabnr
   exe "tabc ".vbtabnr
-  call s:RestoreSettings()
+  call vimball#RestoreSettings()
   call s:ChgDir(curdir)
 
 "  call Dret("vimball#Vimball")
@@ -372,9 +396,6 @@ fun! vimball#RmVimball(...)
 "   call Dret("vimball#RmVimball : (g:vimball_norecord)")
    return
   endif
-  let eikeep= &ei
-  set ei=all
-"  call Decho("turned off all events")
 
   if a:0 == 0
    let curfile= expand("%:tr")
@@ -420,7 +441,9 @@ fun! vimball#RmVimball(...)
     let foundit = 0
    endif
    if foundit
-	let exestring= substitute(getline("."),'^'.curfile.'\S\{-}\.vba: ','','')
+	let exestring  = substitute(getline("."),'^'.curfile.'\S\{-}\.vba: ','','')
+    let s:VBRstring= substitute(exestring,'call delete(','','g')
+    let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
 "	call Decho("exe ".exestring)
 	silent! keepalt keepjumps exe exestring
 	silent! keepalt keepjumps d
@@ -428,7 +451,8 @@ fun! vimball#RmVimball(...)
 "	call Decho("exestring<".exestring.">")
 	echomsg "removed ".exestring." files"
    else
-	let curfile= substitute(curfile,'\.vba','','')
+    let s:VBRstring= ''
+	let curfile    = substitute(curfile,'\.vba','','')
 "    call Decho("unable to find <".curfile."> in .VimballRecord")
 	if !exists("s:ok_unablefind")
      call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
@@ -440,10 +464,6 @@ fun! vimball#RmVimball(...)
   endif
   call s:ChgDir(curdir)
 
-  " restoring events
-"  call Decho("restoring events")
-  let &ei= eikeep
-
 "  call Dret("vimball#RmVimball")
 endfun
 
@@ -454,6 +474,7 @@ fun! vimball#Decompress(fname)
 
   " decompression:
   if     expand("%") =~ '.*\.gz'  && executable("gunzip")
+   " handle *.gz with gunzip
    silent exe "!gunzip ".s:Escape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">")
@@ -461,7 +482,19 @@ fun! vimball#Decompress(fname)
    let fname= substitute(a:fname,'\.gz$','','')
    exe "e ".escape(fname,' \')
    call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+
+  elseif expand("%") =~ '.*\.gz' && executable("gzip")
+   " handle *.gz with gzip -d
+   silent exe "!gzip -d ".s:Escape(a:fname)
+   if v:shell_error != 0
+	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">")
+   endif
+   let fname= substitute(a:fname,'\.gz$','','')
+   exe "e ".escape(fname,' \')
+   call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+
   elseif expand("%") =~ '.*\.bz2' && executable("bunzip2")
+   " handle *.bz2 with bunzip2
    silent exe "!bunzip2 ".s:Escape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">")
@@ -469,7 +502,19 @@ fun! vimball#Decompress(fname)
    let fname= substitute(a:fname,'\.bz2$','','')
    exe "e ".escape(fname,' \')
    call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+
+  elseif expand("%") =~ '.*\.bz2' && executable("bzip2")
+   " handle *.bz2 with bzip2 -d
+   silent exe "!bzip2 -d ".s:Escape(a:fname)
+   if v:shell_error != 0
+	call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">")
+   endif
+   let fname= substitute(a:fname,'\.bz2$','','')
+   exe "e ".escape(fname,' \')
+   call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
+
   elseif expand("%") =~ '.*\.zip' && executable("unzip")
+   " handle *.zip with unzip
    silent exe "!unzip ".s:Escape(a:fname)
    if v:shell_error != 0
 	call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">")
@@ -478,6 +523,7 @@ fun! vimball#Decompress(fname)
    exe "e ".escape(fname,' \')
    call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)")
   endif
+
   set noma bt=nofile fmr=[[[,]]] fdm=marker
 
 "  call Dret("Decompress")
@@ -518,9 +564,9 @@ endfun
 fun! s:ChgDir(newdir)
 "  call Dfunc("ChgDir(newdir<".a:newdir.">)")
   if (has("win32") || has("win95") || has("win64") || has("win16"))
-    exe 'silent cd '.escape(substitute(a:newdir,'/','\\','g'),' ')
+   exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
   else
-   exe 'silent cd '.escape(a:newdir,' ')
+   exe 'silent cd '.fnameescape(a:newdir)
   endif
 "  call Dret("ChgDir : curdir<".getcwd().">")
 endfun
@@ -627,6 +673,11 @@ fun! s:VimballHome()
    " go to vim plugin home
    for home in split(&rtp,',') + ['']
     if isdirectory(home) && filewritable(home) | break | endif
+	let basehome= substitute(home,'[/\\]\.vim$','','')
+    if isdirectory(basehome) && filewritable(basehome)
+	 let home= basehome."/.vim"
+	 break
+	endif
    endfor
    if home == ""
     " just pick the first directory
@@ -636,13 +687,25 @@ fun! s:VimballHome()
     let home= substitute(home,'/','\\','g')
    endif
   endif
+  " insure that the home directory exists
+"  call Decho("picked home<".home.">")
+  if !isdirectory(home)
+   if exists("g:vimball_mkdir")
+"	call Decho("home<".home."> isn't a directory -- making it now with g:vimball_mkdir<".g:vimball_mkdir.">")
+"    call Decho("system(".g:vimball_mkdir." ".s:Escape(home).")")
+    call system(g:vimball_mkdir." ".s:Escape(home))
+   else
+"	call Decho("home<".home."> isn't a directory -- making it now with mkdir()")
+    call mkdir(home)
+   endif
+  endif
 "  call Dret("VimballHome <".home.">")
   return home
 endfun
 
 " ---------------------------------------------------------------------
-" s:SaveSettings: {{{2
-fun! s:SaveSettings()
+" vimball#SaveSettings: {{{2
+fun! vimball#SaveSettings()
 "  call Dfunc("SaveSettings()")
   let s:makeep  = getpos("'a")
   let s:regakeep= @a
@@ -669,8 +732,8 @@ fun! s:SaveSettings()
 endfun
 
 " ---------------------------------------------------------------------
-" s:RestoreSettings: {{{2
-fun! s:RestoreSettings()
+" vimball#RestoreSettings: {{{2
+fun! vimball#RestoreSettings()
 "  call Dfunc("RestoreSettings()")
   let @a      = s:regakeep
   if exists("&acd")
diff --git a/vimfiles/doc/MultipleSearch.txt b/vimfiles/doc/MultipleSearch.txt
new file mode 100644
index 0000000..30381d5
--- /dev/null
+++ b/vimfiles/doc/MultipleSearch.txt
@@ -0,0 +1,106 @@
+*MultipleSearch.txt*  Simultaneously show multiple search results   Ver. 1.3
+
+Maintainer:   Dan Sharp <dwsharp at hotmail dot com>
+Last Changed: 13 Aug 2008
+License:      Vim License
+
+==============================================================================
+1. MultipleSearch Plugin                                     *MultipleSearch*
+
+MultipleSearch allows you to have the results of multiple searches displayed
+on the screen at the same time.  Each search highlights its results in a
+different color, and all searches are displayed at once.  After the maximum
+number of colors is used, the script starts over with the first color.
+
+Special thanks to:
+Peter Valach for suggestions and testing!
+Jeff Mei for the suggesting and testing the :SearchBuffers command.
+Amber Hassan for fixing problems with a search pattern containing quote
+characters!
+Manuel Picaza for the mapping to :Search the word under the cursor.
+
+------------------------------------------------------------------------------
+2. Commands                                         *MultipleSearch-commands*
+
+:Search <pattern>                                               *:Search*
+will highlight all occurrences of <pattern> in the current buffer.  A
+subsequent :Search <pattern2> will highlight all occurrences of <pattern2>
+in the current buffer, retaining the highlighting of <pattern1> as well.
+<pattern1> and <pattern2> are any search pattern like you would use in a
+normal /<pattern> search.
+
+The :Search command honors Vim's 'ignorecase' and 'smartcase' settings for
+its own search.  You can use the |\c| and |\C| flags in the search pattern to
+force case matching no matter the setting of 'ignorecase' and 'smartcase'.
+
+:SearchBuffers <pattern>                                    *:SearchBuffers*
+The :SearchBuffers command works just like :Search, but the search occurs in
+all currently listed buffers (i.e., those that appear in the output of :ls).
+The match in all buffers will have the same color.  This is different than 
+:bufdo Search <pattern> because in that case, each buffer will highlight the
+match in a different color.
+
+" Clear the current search selections and start over with the first color in
+" the sequence.
+:SearchReset
+To clear the highlighting, issue the command :SearchReset (for the current
+buffer) or :SearchBuffersReset (for all buffers).
+
+" Clear the current search selections and start over with the first color in
+" the sequence.
+:SearchBuffersReset
+To clear the highlighting, issue the command :SearchReset (for the current
+buffer) or :SearchBuffersReset (for all buffers).
+
+" Reinitialize the script after changing one of the global preferences.
+:SearchReinit
+If you change one of the preference variables, you can issue the command
+:SearchReinit
+to update the script with your new selections.
+
+------------------------------------------------------------------------------
+3. Mappings                                          *MultipleSearch-mappings*
+
+" Thanks to Manuel Picaza for the following mapping to :Search the word under
+" the cursor.
+nnoremap <silent> <Leader>*
+
+" Following Manuel's idea, adapt the former 'Super Star' tip from vim.org to work with
+" :Search on a visual selection.
+vnoremap <silent> <Leader>* 
+
+" Set the current search pattern to the next one in the list
+nnoremap <silent> <Leader>n
+
+" Set the current search pattern to the previous one in the list
+nnoremap <silent> <Leader>N
+
+------------------------------------------------------------------------------
+4. Settings                                          *MultipleSearch-settings*
+
+You can specify the maximum number of different colors to use by setting the
+g:MultipleSearchMaxColors variable in your .vimrc.  The default setting is
+four, but the script should handle as much as your terminal / GUI can
+display.  The g:MultipleSearchColorSequence variable lets you list the
+colors you want displayed, and in what order.  To make the text more
+readable, you can set the g:MultipleSearchTextColorSequence variable to a
+list of colors for the text, each position corresponding to the color in the
+same position in g:MultipleSearchColorSequence.
+
+                                                   *g:MultipleSearchMaxColors*
+g:MultipleSearchMaxColors           (Default: 8)
+    Specifes a maximum number of colors to use.
+        
+                                               *g:MultipleSearchColorSequence*
+g:MultipleSearchColorSequence       (Default: "red,yellow,blue,green,magenta,
+                                               cyan,gray,brown")
+    Defines the sequence of colors to use for searches.
+
+                                           *g:MultipleSearchTextColorSequence*
+g:MultipleSearchTextColorSequence   (Default: "white,black,white,black,white,
+                                               black,black,white")
+    Defines the text color for searches, so that it can still be read against
+    the colored background.
+
+==============================================================================
+vim: ft=help:norl:ts=8:tw=78
diff --git a/vimfiles/doc/pi_netrw.txt b/vimfiles/doc/pi_netrw.txt
index 77a9b43..bd83bcf 100644
--- a/vimfiles/doc/pi_netrw.txt
+++ b/vimfiles/doc/pi_netrw.txt
@@ -1,2931 +1,3165 @@
-*pi_netrw.txt*  For Vim version 7.1.  Last change: 2008 Mar 28
-
-	    -----------------------------------------------------
-	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
-	    -----------------------------------------------------
-
-
-*dav*           *http*          *network*       *Nwrite*   *netrw-file*
-*fetch*         *netrw*         *Nread*         *rcp*      *scp*
-*ftp*           *netrw.vim*     *Nsource*       *rsync*    *sftp*
-
-==============================================================================
-1. Contents						*netrw-contents* {{{1
-
-1.  Contents.............................................|netrw-contents|
-2.  Starting With Netrw..................................|netrw-start|
-3.  Netrw Reference......................................|netrw-ref|
-      EXTERNAL APPLICATIONS AND PROTOCOLS................|netrw-externapp|
-      READING............................................|netrw-read|
-      WRITING............................................|netrw-write|
-      DIRECTORY LISTING..................................|netrw-dirlist|
-      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
-      VARIABLES AND SETTINGS.............................|netrw-variables|
-      PATHS..............................................|netrw-path|
-4.  Network-Oriented File Transfer.......................|netrw-xfer|
-      NETRC..............................................|netrw-netrc|
-      PASSWORD...........................................|netrw-passwd|
-5.  Activation...........................................|netrw-activate|
-6.  Transparent File Editing.............................|netrw-transparent|
-7.  Ex Commands..........................................|netrw-ex|
-8.  Variables and Options................................|netrw-var|
-9.  Browsing.............................................|netrw-browse|
-      Introduction To Browsing...........................|netrw-browse-intro|
-      Quick Reference: Maps..............................|netrw-browse-maps|
-      Quick Reference: Commands..........................|netrw-browse-cmds|
-      Bookmarking A Directory............................|netrw-mb|
-      Browsing...........................................|netrw-cr|
-      Browsing With A Horizontally Split Window..........|netrw-o|
-      Browsing With A New Tab............................|netrw-t|
-      Browsing With A Vertically Split Window............|netrw-v|
-      Change Listing Style...............................|netrw-i|
-      Changing To A Bookmarked Directory.................|netrw-gb|
-      Changing To A Predecessor Directory................|netrw-u|
-      Changing To A Successor Directory..................|netrw-U|
-      Customizing Browsing With A User Function..........|netrw-x|
-      Deleting Files Or Directories......................|netrw-D|
-      Directory Exploring Commands.......................|netrw-explore|
-      Exploring With Stars and Patterns..................|netrw-star|
-      Displaying Information About File..................|netrw-qf|
-      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
-      Editing The Sorting Sequence.......................|netrw-S|
-      Going Up...........................................|netrw--|
-      Hiding Files Or Directories........................|netrw-a|
-      Improving Browsing.................................|netrw-ssh-hack|
-      Listing Bookmarks And History......................|netrw-qb|
-      Making A New Directory.............................|netrw-d|
-      Making The Browsing Directory The Current Directory|netrw-c|
-      Marked Files: Compression And Decompression........|netrw-mz|
-      Marked Files: Printing.............................|netrw-mp|
-      Marked Files: Tagging..............................|netrw-mT|
-      Marked Files: Unmarking............................|netrw-mu|
-      Marking Files......................................|netrw-mf|
-      Marking Files By Regular Expression................|netrw-mr|
-      Netrw Browser Variables............................|netrw-browser-var|
-      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
-      Netrw Settings.....................................|netrw-settings|
-      Obtaining A File...................................|netrw-O|
-      Preview Window.....................................|netrw-p|
-      Previous Window....................................|netrw-P|
-      Refreshing The Listing.............................|netrw-ctrl-l|
-      Renaming Files Or Directories......................|netrw-move|
-      Reversing Sorting Order............................|netrw-r|
-      Selecting Sorting Style............................|netrw-s|
-10. Problems and Fixes...................................|netrw-problems|
-11. Debugging Netrw Itself...............................|netrw-debug|
-12. History..............................................|netrw-history|
-13. Credits..............................................|netrw-credits|
-
-{Vi does not have any of this}
-
-==============================================================================
-2. Starting With Netrw					*netrw-start* {{{1
-
-Netrw makes reading files, writing files, browsing over a network, and
-browsing locally easy!  First, make sure that you have plugins enabled, so
-you'll need to have at least the following in your <.vimrc>:
-(or see |netrw-activate|) >
-
-	set nocp                    " 'compatible' is not set
-	filetype plugin on          " plugins are enabled
-<
-(see |'cp'| and |:filetype-plugin-on|)
-
-Netrw supports "transparent" editing of files on other machines using urls
-(see |netrw-transparent|). As an example of this, let's assume you have an
-account on some other machine; if you can use scp, try: >
-
-	vim scp://hostname/path/to/file
-<
-Want to make ssh/scp easier to use? Check out |netrw-ssh-hack|!
-
-So, what if you have ftp, not ssh/scp?  That's easy, too; try >
-
-	vim ftp://hostname/path/to/file
-<
-Want to make ftp simpler to use?  See if your ftp supports a file called
-<.netrc> -- typically it goes in your home directory, has read/write
-permissions for only the user to read (ie. not group, world, other, etc),
-and has lines resembling >
-
-	machine HOSTNAME login USERID password "PASSWORD"
-	machine HOSTNAME login USERID password "PASSWORD"
-	...
-	default          login USERID password "PASSWORD"
-<
-Now about browsing -- when you just want to look around before editing a
-file.  For browsing on your current host, just "edit" a directory: >
-
-	vim .
-	vim /home/userid/path
-<
-For browsing on a remote host, "edit" a directory (but make sure that
-the directory name is followed by a "/"): >
-
-	vim scp://hostname/
-	vim ftp://hostname/path/to/dir/
-<
-See |netrw-browse| for more!
-
-There are more protocols supported by netrw just than scp and ftp, too: see the
-next section, |netrw-externapp|, for how to use these external applications.
-
-If you want to use plugins, but for some reason don't wish to use netrw, then
-you need to avoid loading both the plugin and the autoload portions of netrw.
-You may do so by placing the following two lines in your <.vimrc>: >
-
-	:let g:loaded_netrw       = 1
-	:let g:loaded_netrwPlugin = 1
-<
-
-==============================================================================
-3. Netrw Reference					*netrw-ref* {{{1
-
-   Netrw supports several protocols in addition to scp and ftp mentioned
-   in |netrw-start|.  These include dav, fetch, http,... well, just look
-   at the list in |netrw-externapp|.  Each protocol is associated with a
-   variable which holds the default command supporting that protocol.
-
-EXTERNAL APPLICATIONS AND PROTOCOLS			*netrw-externapp* {{{2
-
-	Protocol  Variable	    Default Value
-	--------  ----------------  -------------
-	   dav:    *g:netrw_dav_cmd*  = "cadaver"
-	 fetch:  *g:netrw_fetch_cmd*  = "fetch -o"    if fetch is available
-	   ftp:    *g:netrw_ftp_cmd*  = "ftp"
-	  http:   *g:netrw_http_cmd*  = "curl -o"     if     curl  is available
-	  http:    g:netrw_http_cmd   = "wget -q -O"  elseif wget  is available
-          http:    g:netrw_http_cmd   = "fetch -o"    elseif fetch is available
-	   rcp:    *g:netrw_rcp_cmd*  = "rcp"
-	 rsync:  *g:netrw_rsync_cmd*  = "rsync -a"
-	   scp:    *g:netrw_scp_cmd*  = "scp -q"
-	  sftp:   *g:netrw_sftp_cmd*  = "sftp"
-
-READING						*netrw-read* *netrw-nread* {{{2
-
-	Generally, one may just use the url notation with a normal editing
-	command, such as >
-
-		:e ftp://[user@]machine/path
-<
-	Netrw also provides the Nread command:
-
-	:Nread ?					give help
-	:Nread "machine:path"				uses rcp
-	:Nread "machine path"				uses ftp w/ <.netrc>
-	:Nread "machine id password path"		uses ftp
-	:Nread "dav://machine[:port]/path"		uses cadaver
-	:Nread "fetch://[user@]machine/path"		uses fetch
-	:Nread "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
-	:Nread "http://[user@]machine/path"		uses http  uses wget
-	:Nread "rcp://[user@]machine/path"		uses rcp
-	:Nread "rsync://[user@]machine[:port]/path"	uses rsync
-	:Nread "scp://[user@]machine[[:#]port]/path"	uses scp
-	:Nread "sftp://[user@]machine/path"		uses sftp
-
-WRITING					*netrw-write* *netrw-nwrite* {{{2
-
-	One may just use the url notation with a normal file writing
-	command, such as >
-
-		:w ftp://[user@]machine/path
-<
-	Netrw also provides the Nwrite command:
-
-	:Nwrite ?					give help
-	:Nwrite "machine:path"				uses rcp
-	:Nwrite "machine path"				uses ftp w/ <.netrc>
-	:Nwrite "machine id password path"		uses ftp
-	:Nwrite "dav://machine[:port]/path"		uses cadaver
-	:Nwrite "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
-	:Nwrite "rcp://[user@]machine/path"		uses rcp
-	:Nwrite "rsync://[user@]machine[:port]/path"	uses rsync
-	:Nwrite "scp://[user@]machine[[:#]port]/path"	uses scp
-	:Nwrite "sftp://[user@]machine/path"		uses sftp
-	http: not supported!
-
-SOURCING					*netrw-source* {{{2
-
-	One may just use the url notation with the normal file sourcing
-	command, such as >
-
-		:so ftp://[user@]machine/path
-<
-	Netrw also provides the Nsource command:
-
-	:Nsource ?					give help
-	:Nsource "dav://machine[:port]/path"		uses cadaver
-	:Nsource "fetch://[user@]machine/path"		uses fetch
-	:Nsource "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
-	:Nsource "http://[user@]machine/path"		uses http  uses wget
-	:Nsource "rcp://[user@]machine/path"		uses rcp
-	:Nsource "rsync://[user@]machine[:port]/path"	uses rsync
-	:Nsource "scp://[user@]machine[[:#]port]/path"	uses scp
-	:Nsource "sftp://[user@]machine/path"		uses sftp
-
-DIRECTORY LISTING					*netrw-dirlist* {{{2
-
-	One may browse a directory to get a listing by simply attempting to
-	edit the directory: >
-
-		:e scp://[user]@hostname/path/
-		:e ftp://[user]@hostname/path/
-<
-	For remote directories (ie. those using scp or ftp), that trailing
-	"/" is necessary (it tells netrw that its to treat it as a directory
-	to browse instead of a file to download).
-
-	However, the Nread command can also be used to accomplish this:
-
-	:Nread [protocol]://[user]@hostname/path/
-
-					*netrw-login* *netrw-password*
-CHANGING USERID AND PASSWORD		*netrw-chgup* *netrw-userpass* {{{2
-
-	Attempts to use ftp will prompt you for a user-id and a password.
-	These will be saved in global variables g:netrw_uid and
-	s:netrw_passwd; subsequent uses of ftp will re-use those two items to
-	simplify the further use of ftp.  However, if you need to use a
-	different user id and/or password, you'll want to call NetUserPass()
-	first.  To work around the need to enter passwords, check if your ftp
-	supports a <.netrc> file in your home directory.  Also see
-	|netrw-passwd| (and if you're using ssh/scp hoping to figure out how
-	to not need to use passwords, look at |netrw-ssh-hack|).
-
-	:NetUserPass [uid [password]]		-- prompts as needed
-	:call NetUserPass()			-- prompts for uid and password
-	:call NetUserPass("uid")		-- prompts for password
-	:call NetUserPass("uid","password")	-- sets global uid and password
-
-NETRW VARIABLES AND SETTINGS				*netrw-variables* {{{2
-(also see: |netrw-browser-var| |netrw-protocol| |netrw-settings| |netrw-var|)
-
-Netrw provides a lot of variables which allow you to customize netrw to your
-preferences.  One way to look at them is via the command :NetrwSettings (see
-|netrw-settings|) which will display your current netrw settings.  Most such
-settings are described below, in |netrw-browser-options|, and in
-|netrw-externapp|:
-
- *b:netrw_lastfile*	last file Network-read/written retained on a per-buffer
-			basis		(supports plain :Nw )
-
- *g:netrw_ftp*		if it doesn't exist, use default ftp
-			=0 use default ftp		       (uid password)
-			=1 use alternate ftp method	  (user uid password)
-			If you're having trouble with ftp, try changing the
-			value of this variable to see if the alternate ftp
-			method works for your setup.
-
- *g:netrw_extracmd*	default: doesn't exist
-                        If this variable exists, then any string it contains
-			will be placed into the commands set to your ftp
-			client.  As an example:
-			  ="passive"
-
- *g:netrw_ftpmode*	="binary"				    (default)
-			="ascii"
-
- *g:netrw_ignorenetrc*	=0 (default for linux, cygwin)
-			=1 If you have a <.netrc> file but it doesn't work and
-			   you want it ignored, then set this variable as
-			   shown. (default for Windows + cmd.exe)
-
- *g:netrw_menu*		=0 disable netrw's menu
-			=1 (default) netrw's menu enabled
-
- *g:netrw_nogx*		if this variable exists, then the "gx" map will not
-			be available (see |netrw-gx|)
-
- *g:netrw_uid*		(ftp) user-id,      retained on a per-session basis
- *s:netrw_passwd*	(ftp) password,     retained on a per-session basis
-
- *g:netrw_preview*	=0 (default) preview window shown in a horizontally
-                           split window
-			=1 preview window shown in a vertically split window.
-			Also affects the "previous window" (see |netrw-P|) in
-			the same way.
-
- *g:netrw_shq*		= "'" for Unix/Linux systems (ie. a single quote)
-			= "'" for Windows + cygwin systems (ie. a single quote)
-			= '"' for Windows systems, not using cygwin
-			      (ie. a double quote)
-			Controls the quoting character used during scp and ftp
-			commands.
-
- *g:netrw_scpport*      = "-P" : option to use to set port for scp
- *g:netrw_sshport*      = "-p" : option to use to set port for ssh
-
-  *g:netrw_silent*	=0 : transfers done normally
-			=1 : transfers done silently
-
- *g:netrw_use_errorwindow* =1 : messages from netrw will use a separate one
-                                line window.  This window provides reliable
-				delivery of messages. (default)
-			   =0 : messages from netrw will use echoerr ;
-			        messages don't always seem to show up this
-				way, but one doesn't have to quit the window.
-
- *g:netrw_win95ftp*	=1 if using Win95, will remove four trailing blank
-			   lines that o/s's ftp "provides" on transfers
-			=0 force normal ftp behavior (no trailing line removal)
-
- *g:netrw_cygwin*	=1 assume scp under windows is from cygwin. Also
-			   permits network browsing to use ls with time and
-			   size sorting (default if windows)
-			=0 assume Windows' scp accepts windows-style paths
-			   Network browsing uses dir instead of ls
-			This option is ignored if you're using unix
-
- *g:netrw_use_nt_rcp*	=0 don't use the rcp of WinNT, Win2000 and WinXP
-			=1 use WinNT's rcp in binary mode         (default)
-
-PATHS							*netrw-path* {{{2
-
-Paths to files are generally user-directory relative for most protocols.
-It is possible that some protocol will make paths relative to some
-associated directory, however.
->
-	example:  vim scp://user@host/somefile
-	example:  vim scp://user@host/subdir1/subdir2/somefile
-<
-where "somefile" is in the "user"'s home directory.  If you wish to get a
-file using root-relative paths, use the full path:
->
-	example:  vim scp://user@host//somefile
-	example:  vim scp://user@host//subdir1/subdir2/somefile
-<
-
-==============================================================================
-4. Network-Oriented File Transfer			*netrw-xfer* {{{1
-
-Network-oriented file transfer under Vim is implemented by a VimL-based script
-(<netrw.vim>) using plugin techniques.  It currently supports both reading and
-writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
-dav/cadaver, rsync, or sftp.
-
-http is currently supported read-only via use of wget or fetch.
-
-<netrw.vim> is a standard plugin which acts as glue between Vim and the
-various file transfer programs.  It uses autocommand events (BufReadCmd,
-FileReadCmd, BufWriteCmd) to intercept reads/writes with url-like filenames. >
-
-	ex. vim ftp://hostname/path/to/file
-<
-The characters preceding the colon specify the protocol to use; in the
-example, it's ftp.  The <netrw.vim> script then formulates a command or a
-series of commands (typically ftp) which it issues to an external program
-(ftp, scp, etc) which does the actual file transfer/protocol.  Files are read
-from/written to a temporary file (under Unix/Linux, /tmp/...) which the
-<netrw.vim> script will clean up.
-
-				*netrw-putty* *netrw-pscp* *netrw-psftp*
-One may modify any protocol's implementing external application by setting a
-variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
-"scp -q").  As an example, consider using PuTTY: >
-
-	let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
-	let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
-<
-See |netrw-p8| for more about putty, pscp, psftp, etc.
-
-Ftp, an old protocol, seems to be blessed by numerous implementations.
-Unfortunately, some implementations are noisy (ie., add junk to the end of the
-file).  Thus, concerned users may decide to write a NetReadFixup() function
-that will clean up after reading with their ftp.  Some Unix systems (ie.,
-FreeBSD) provide a utility called "fetch" which uses the ftp protocol but is
-not noisy and more convenient, actually, for <netrw.vim> to use.
-Consequently, if "fetch" is executable, it will be used to do reads for
-ftp://... (and http://...) .  See |netrw-var| for more about this.
-
-For rcp, scp, sftp, and http, one may use network-oriented file transfers
-transparently; ie.
->
-	vim rcp://[user@]machine/path
-	vim scp://[user@]machine/path
-<
-If your ftp supports <.netrc>, then it too can be just as transparently used
-if the needed triad of machine name, user id, and password are present in
-that file.  Your ftp must be able to use the <.netrc> file on its own, however.
->
-	vim ftp://[user@]machine[[:#]portnumber]/path
-<
-However, ftp will often need to query the user for the userid and password.
-The latter will be done "silently"; ie. asterisks will show up instead of
-the actually-typed-in password.  Netrw will retain the userid and password
-for subsequent read/writes from the most recent transfer so subsequent
-transfers (read/write) to or from that machine will take place without
-additional prompting.
-
-								*netrw-urls*
-  +=================================+============================+============+
-  |  Reading                        | Writing                    |  Uses      |
-  +=================================+============================+============+
-  | DAV:                            |                            |            |
-  |  dav://host/path                |                            | cadaver    |
-  |  :Nread dav://host/path         | :Nwrite dav://host/path    | cadaver    |
-  +---------------------------------+----------------------------+------------+
-  | FETCH:                          |                            |            |
-  |  fetch://[user@]host/path       |                            |            |
-  |  fetch://[user@]host:http/path  |  Not Available             | fetch      |
-  |  :Nread fetch://[user@]host/path|                            |            |
-  +---------------------------------+----------------------------+------------+
-  | FILE:                           |                            |            |
-  |  file:///*                      | file:///*                  |            |
-  |  file://localhost/*             | file://localhost/*         |            |
-  +---------------------------------+----------------------------+------------+
-  | FTP:          (*3)              |              (*3)          |            |
-  |  ftp://[user@]host/path         | ftp://[user@]host/path     | ftp  (*2)  |
-  |  :Nread ftp://host/path         | :Nwrite ftp://host/path    | ftp+.netrc |
-  |  :Nread host path               | :Nwrite host path          | ftp+.netrc |
-  |  :Nread host uid pass path      | :Nwrite host uid pass path | ftp        |
-  +---------------------------------+----------------------------+------------+
-  | HTTP: wget is executable: (*4)  |                            |            |
-  |  http://[user@]host/path        |        Not Available       | wget       |
-  +---------------------------------+----------------------------+------------+
-  | HTTP: fetch is executable (*4)  |                            |            |
-  |  http://[user@]host/path        |        Not Available       | fetch      |
-  +---------------------------------+----------------------------+------------+
-  | RCP:                            |                            |            |
-  |  rcp://[user@]host/path         | rcp://[user@]host/path     | rcp        |
-  +---------------------------------+----------------------------+------------+
-  | RSYNC:                          |                            |            |
-  |  rsync://[user@]host/path       | rsync://[user@]host/path   | rsync      |
-  |  :Nread rsync://host/path       | :Nwrite rsync://host/path  | rsync      |
-  |  :Nread rcp://host/path         | :Nwrite rcp://host/path    | rcp        |
-  +---------------------------------+----------------------------+------------+
-  | SCP:                            |                            |            |
-  |  scp://[user@]host/path         | scp://[user@]host/path     | scp        |
-  |  :Nread scp://host/path         | :Nwrite scp://host/path    | scp  (*1)  |
-  +---------------------------------+----------------------------+------------+
-  | SFTP:                           |                            |            |
-  |  sftp://[user@]host/path        | sftp://[user@]host/path    | sftp       |
-  |  :Nread sftp://host/path        | :Nwrite sftp://host/path   | sftp  (*1) |
-  +=================================+============================+============+
-
-	(*1) For an absolute path use scp://machine//path.
-
-	(*2) if <.netrc> is present, it is assumed that it will
-	work with your ftp client.  Otherwise the script will
-	prompt for user-id and password.
-
-        (*3) for ftp, "machine" may be machine#port or machine:port
-	if a different port is needed than the standard ftp port
-
-	(*4) for http:..., if wget is available it will be used.  Otherwise,
-	if fetch is available it will be used.
-
-Both the :Nread and the :Nwrite ex-commands can accept multiple filenames.
-
-
-NETRC							*netrw-netrc*
-
-The <.netrc> file, typically located in your home directory, contains lines
-therein which map a hostname (machine name) to the user id and password you
-prefer to use with it.
-
-The typical syntax for lines in a <.netrc> file is given as shown below.
-Ftp under Unix usually supports <.netrc>; ftp under Windows usually doesn't.
->
-	machine {full machine name} login {user-id} password "{password}"
-	default login {user-id} password "{password}"
-
-Your ftp client must handle the use of <.netrc> on its own, but if the
-<.netrc> file exists, an ftp transfer will not ask for the user-id or
-password.
-
-	Note:
-	Since this file contains passwords, make very sure nobody else can
-	read this file!  Most programs will refuse to use a .netrc that is
-	readable for others.  Don't forget that the system administrator can
-	still read the file!  Ie. for Linux/Unix: chmod 600 .netrc
-
-
-PASSWORD						*netrw-passwd*
-
-The script attempts to get passwords for ftp invisibly using |inputsecret()|,
-a built-in Vim function.  See |netrw-uidpass| for how to change the password
-after one has set it.
-
-Unfortunately there doesn't appear to be a way for netrw to feed a password to
-scp.  Thus every transfer via scp will require re-entry of the password.
-However, |netrw-ssh-hack| can help with this problem.
-
-
-==============================================================================
-5. Activation						*netrw-activate* {{{1
-
-Network-oriented file transfers are available by default whenever Vim's
-|'nocompatible'| mode is enabled.  Netrw's script files reside in your
-system's plugin, autoload, and syntax directories; just the
-plugin/netrwPlugin.vim script is sourced automatically whenever you bring up
-vim.  The main script in autoload/netrw.vim is only loaded when you actually
-use netrw.  I suggest that, at a minimum, you have at least the following in
-your <.vimrc> customization file: >
-
-	set nocp
-	if version >= 600
-	  filetype plugin indent on
-	endif
-<
-
-==============================================================================
-6. Transparent File Editing			*netrw-transparent* {{{1
-
-Transparent file transfers occur whenever a regular file read or write
-(invoked via an |:autocmd| for |BufReadCmd|, |BufWriteCmd|, or |SourceCmd|
-events) is made.  Thus one may read, write, or source  files across networks
-just as easily as if they were local files! >
-
-	vim ftp://[user@]machine/path
-	...
-	:wq
-
-See |netrw-activate| for more on how to encourage your vim to use plugins
-such as netrw.
-
-
-==============================================================================
-7. Ex Commands						*netrw-ex* {{{1
-
-The usual read/write commands are supported.  There are also a few
-additional commands available.  Often you won't need to use Nwrite or
-Nread as shown in |netrw-transparent| (ie. simply use >
-  :e url
-  :r url
-  :w url
-instead, as appropriate) -- see |netrw-urls|.  In the explanations
-below, a {netfile} is an url to a remote file.
-
-:[range]Nw[rite]	Write the specified lines to the current
-		file as specified in b:netrw_lastfile.
-
-:[range]Nw[rite] {netfile} [{netfile}]...
-		Write the specified lines to the {netfile}.
-
-:Nr[ead]		Read the specified lines into the current
-		buffer from the file specified in
-		b:netrw_lastfile.
-
-:Nr[ead] {netfile} {netfile}...
-		Read the {netfile} after the current line.
-
-:Ns[ource] {netfile}
-		Source the {netfile}.
-		To start up vim using a remote .vimrc, one may use
-		the following (all on one line) (tnx to Antoine Mechelynck) >
-		vim -u NORC -N
-		 --cmd "runtime plugin/netrwPlugin.vim"
-		 --cmd "source scp://HOSTNAME/.vimrc"
-<								*netrw-uidpass*
-:call NetUserPass()
-		If g:netrw_uid and s:netrw_passwd don't exist,
-		this function will query the user for them.
-
-:call NetUserPass("userid")
-		This call will set the g:netrw_uid and, if
-		the password doesn't exist, will query the user for it.
-
-:call NetUserPass("userid","passwd")
-		This call will set both the g:netrw_uid and s:netrw_passwd.
-		The user-id and password are used by ftp transfers.  One may
-		effectively remove the user-id and password by using empty
-		strings (ie. "").
-
-:NetrwSettings  This command is described in |netrw-settings| -- used to
-                display netrw settings and change netrw behavior.
-
-
-==============================================================================
-8. Variables and Options		*netrw-options* *netrw-var* {{{1
-
-(if you're interested in the netrw browser settings, see: |netrw-browser-var|)
-
-The <netrw.vim> script provides several variables which act as options to
-affect <netrw.vim>'s file transfer behavior.  These variables typically may be
-set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
-
->
-
-                        -------------
-                        Netrw Options
-                        -------------
-	Option			Meaning
-	--------------		-----------------------------------------------
-<
-        b:netrw_col             Holds current cursor position (during NetWrite)
-        g:netrw_cygwin          =1 assume scp under windows is from cygwin
-                                                              (default/windows)
-                                =0 assume scp under windows accepts windows
-                                   style paths                (default/else)
-        g:netrw_ftp             =0 use default ftp            (uid password)
-        g:netrw_ftpmode         ="binary"                     (default)
-                                ="ascii"                      (your choice)
-	g:netrw_ignorenetrc     =1                            (default)
-	                           if you have a <.netrc> file but you don't
-				   want it used, then set this variable.  Its
-				   mere existence is enough to cause <.netrc>
-				   to be ignored.
-        b:netrw_lastfile        Holds latest method/machine/path.
-        b:netrw_line            Holds current line number     (during NetWrite)
-        g:netrw_passwd          Holds current password for ftp.
-	g:netrw_silent          =0 transfers done normally
-	                        =1 transfers done silently
-        g:netrw_uid             Holds current user-id for ftp.
-                                =1 use alternate ftp         (user uid password)
-                                (see |netrw-options|)
-        g:netrw_use_nt_rcp      =0 don't use WinNT/2K/XP's rcp (default)
-                                =1 use WinNT/2K/XP's rcp, binary mode
-        g:netrw_win95ftp        =0 use unix-style ftp even if win95/98/ME/etc
-                                =1 use default method to do ftp >
-	-----------------------------------------------------------------------
-<
-The script will also make use of the following variables internally, albeit
-temporarily.
->
-			     -------------------
-			     Temporary Variables
-			     -------------------
-	Variable		Meaning
-	--------		------------------------------------
-<
-	g:netrw_method		Index indicating rcp/ftp+.netrc/ftp
-	g:netrw_machine		Holds machine name parsed from input
-	g:netrw_fname		Holds filename being accessed >
-	------------------------------------------------------------
-<
-							*netrw-protocol*
-
-Netrw supports a number of protocols.  These protocols are invoked using the
-variables listed below, and may be modified by the user.
->
-			   ------------------------
-                           Protocol Control Options
-			   ------------------------
-    Option            Type        Setting         Meaning
-    ---------         --------    --------------  ---------------------------
-<
-    netrw_ftp         variable    =doesn't exist  userid set by "user userid"
-                                  =0              userid set by "user userid"
-                                  =1              userid set by "userid"
-    NetReadFixup      function    =doesn't exist  no change
-                                  =exists         Allows user to have files
-                                                  read via ftp automatically
-                                                  transformed however they wish
-                                                  by NetReadFixup()
-    g:netrw_dav_cmd    variable   ="cadaver"
-    g:netrw_fetch_cmd  variable   ="fetch -o"     if fetch is available
-    g:netrw_ftp_cmd    variable   ="ftp"
-    g:netrw_http_cmd   variable   ="fetch -o"     if      fetch is available
-    g:netrw_http_cmd   variable   ="wget -O"      else if wget  is available
-    g:netrw_list_cmd   variable   ="ssh USEPORT HOSTNAME ls -Fa"
-    g:netrw_rcp_cmd    variable   ="rcp"
-    g:netrw_rsync_cmd  variable   ="rsync -a"
-    g:netrw_scp_cmd    variable   ="scp -q"
-    g:netrw_sftp_cmd   variable   ="sftp" >
-    -------------------------------------------------------------------------
-<
-								*netrw-ftp*
-
-The g:netrw_..._cmd options (|g:netrw_ftp_cmd| and |g:netrw_sftp_cmd|)
-specify the external program to use handle the ftp protocol.  They may
-include command line options (such as -p for passive mode).
-
-Browsing is supported by using the |g:netrw_list_cmd|; the substring
-"HOSTNAME" will be changed via substitution with whatever the current request
-is for a hostname.
-
-Two options (|g:netrw_ftp| and |netrw-fixup|) both help with certain ftp's
-that give trouble .  In order to best understand how to use these options if
-ftp is giving you troubles, a bit of discussion is provided on how netrw does
-ftp reads.
-
-For ftp, netrw typically builds up lines of one of the following formats in a
-temporary file:
->
-  IF g:netrw_ftp !exists or is not 1     IF g:netrw_ftp exists and is 1
-  ----------------------------------     ------------------------------
-<
-       open machine [port]                    open machine [port]
-       user userid password                   userid password
-       [g:netrw_ftpmode]                      password
-       [g:netrw_extracmd]                     [g:netrw_ftpmode]
-       get filename tempfile                  [g:netrw_extracmd]
-                                              get filename tempfile >
-  ---------------------------------------------------------------------
-<
-The |g:netrw_ftpmode| and |g:netrw_extracmd| are optional.
-
-Netrw then executes the lines above by use of a filter:
->
-	:%! {g:netrw_ftp_cmd} -i [-n]
-<
-where
-	g:netrw_ftp_cmd is usually "ftp",
-	-i tells ftp not to be interactive
-	-n means don't use netrc and is used for Method #3 (ftp w/o <.netrc>)
-
-If <.netrc> exists it will be used to avoid having to query the user for
-userid and password.  The transferred file is put into a temporary file.
-The temporary file is then read into the main editing session window that
-requested it and the temporary file deleted.
-
-If your ftp doesn't accept the "user" command and immediately just demands a
-userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
-
-								*netrw-cadaver*
-To handle the SSL certificate dialog for untrusted servers, one may pull
-down the certificate and place it into /usr/ssl/cert.pem.  This operation
-renders the server treatment as "trusted".
-
-						*netrw-fixup* *netreadfixup*
-If your ftp for whatever reason generates unwanted lines (such as AUTH
-messages) you may write a NetReadFixup(tmpfile) function:
->
-    function! NetReadFixup(method,line1,line2)
-      " a:line1: first new line in current file
-      " a:line2: last  new line in current file
-      if     a:method == 1 "rcp
-      elseif a:method == 2 "ftp + <.netrc>
-      elseif a:method == 3 "ftp + machine,uid,password,filename
-      elseif a:method == 4 "scp
-      elseif a:method == 5 "http/wget
-      elseif a:method == 6 "dav/cadaver
-      elseif a:method == 7 "rsync
-      elseif a:method == 8 "fetch
-      elseif a:method == 9 "sftp
-      else               " complain
-      endif
-    endfunction
->
-The NetReadFixup() function will be called if it exists and thus allows you to
-customize your reading process.  As a further example, <netrw.vim> contains
-just such a function to handle Windows 95 ftp.  For whatever reason, Windows
-95's ftp dumps four blank lines at the end of a transfer, and so it is
-desirable to automate their removal.  Here's some code taken from <netrw.vim>
-itself:
->
-    if has("win95") && g:netrw_win95ftp
-     fun! NetReadFixup(method, line1, line2)
-       if method == 3   " ftp (no <.netrc>)
-        let fourblanklines= line2 - 3
-        silent fourblanklines.",".line2."g/^\s*/d"
-       endif
-     endfunction
-    endif
->
-
-==============================================================================
-9. Browsing		*netrw-browsing* *netrw-browse* *netrw-help* {{{1
-   			*netrw-browser*  *netrw-dir*    *netrw-list*
-
-INTRODUCTION TO BROWSING			*netrw-browse-intro* {{{2
-
-Netrw supports the browsing of directories on your local system and on remote
-hosts; browsing includes listing files and directories, entering directories,
-editing files therein, deleting files/directories, making new directories,
-moving (renaming) files and directories, copying files and directories, etc.
-One may mark files and execute any system command on them!  The Netrw browser
-generally implements the previous explorer's maps and commands for remote
-directories, although details (such as pertinent global variable names)
-necessarily differ.  To browse a directory, simply "edit" it! >
-
-	vim /your/directory/
-	vim .
-	vim c:\your\directory\
-<
-(Related topics: |netrw-cr|  |netrw-o|  |netrw-p| |netrw-P| |netrw-t|
-                 |netrw-mf|  |netrw-mx| |netrw-D| |netrw-R| |netrw-v| )
-
-The Netrw remote file and directory browser handles two protocols: ssh and
-ftp.  The protocol in the url, if it is ftp, will cause netrw also to use ftp
-in its remote browsing.  Specifying any other protocol will cause it to be
-used for file transfers; but the ssh protocol will be used to do remote
-browsing.
-
-To use Netrw's remote directory browser, simply attempt to read a "file" with
-a trailing slash and it will be interpreted as a request to list a directory:
->
-	vim [protocol]://[user@]hostname/path/
-<
-where [protocol] is typically scp or ftp.  As an example, try: >
-
-	vim ftp://ftp.home.vim.org/pub/vim/
-<
-For local directories, the trailing slash is not required.  Again, because its
-easy to miss: to browse remote directories, the url must terminate with a
-slash!
-
-If you'd like to avoid entering the password repeatedly for remote directory
-listings with ssh or scp, see |netrw-ssh-hack|.  To avoid password entry with
-ftp, see |netrw-netrc| (if your ftp supports it).
-
-There are several things you can do to affect the browser's display of files:
-
-	* To change the listing style, press the "i" key (|netrw-i|).
-	  Currently there are four styles: thin, long, wide, and tree.
-
-	* To hide files (don't want to see those xyz~ files anymore?) see
-	  |netrw-ctrl-h|.
-
-	* Press s to sort files by name, time, or size.
-
-See |netrw-browse-cmds| for all the things you can do with netrw!
-
-
-QUICK REFERENCE: MAPS				*netrw-browse-maps* {{{2
->
-	  ---			-----------------			----
-	  Map			Quick Explanation			Link
-	  ---			-----------------			----
-<	 <F1>	Causes Netrw to issue help
-	 <cr>	Netrw will enter the directory or read the file      |netrw-cr|
-	 <del>	Netrw will attempt to remove the file/directory      |netrw-del|
-	   -	Makes Netrw go up one directory                      |netrw--|
-	   a	Toggles between normal display,                      |netrw-a|
-		hiding (suppress display of files matching g:netrw_list_hide)
-		showing (display only files which match g:netrw_list_hide)
-	   c	Make browsing directory the current directory        |netrw-c|
-	   d	Make a directory                                     |netrw-d|
-	   D	Attempt to remove the file(s)/directory(ies)         |netrw-D|
-	   gb	Go to previous bookmarked directory                  |netrw-gb|
-	   gi	Display information on file                          |netrw-qf|
-	 <c-h>	Edit file hiding list                             |netrw-ctrl-h|
-	   i	Cycle between thin, long, wide, and tree listings    |netrw-i|
-	 <c-l>	Causes Netrw to refresh the directory listing     |netrw-ctrl-l|
-	   mb	Bookmark current directory                           |netrw-mb|
-	   mc	Copy marked files to marked-file target directory    |netrw-mc|
-	   md	Apply diff to marked files (up to 3)                 |netrw-md|
-	   me	Place marked files on arg list and edit them         |netrw-me|
-	   mf	Mark a file                                          |netrw-mf|
-	   mh	Toggle marked file suffices' presence on hiding list |netrw-mh|
-	   mm	Move marked files to marked-file target directory    |netrw-mm|
-	   mp	Print marked files                                   |netrw-mp|
-	   mr	Mark files satisfying a |regexp|                     |netrw-mr|
-	   mt	Current browsing directory becomes markfile target   |netrw-mt|
-	   mT	Apply ctags to marked files                          |netrw-mT|
-	   mu	Unmark all marked files                              |netrw-mu|
-	   mx	Apply arbitrary shell command to marked files        |netrw-mx|
-	   mz	Compress/decompress marked files                     |netrw-mz|
-	   o	Enter the file/directory under the cursor in a new   |netrw-o|
-	   	browser window.  A horizontal split is used.
-	   O	Obtain a file specified by cursor                    |netrw-O|
-	   p	Preview the file                                     |netrw-p|
-	   P	Browse in the previously used window                 |netrw-P|
-	   q	List bookmarked directories and history              |netrw-qb|
-	   r	Reverse sorting order                                |netrw-r|
-	   R	Rename the designed file(s)/directory(ies)           |netrw-R|
-	   s	Select sorting style: by name, time, or file size    |netrw-s|
-	   S	Specify suffix priority for name-sorting             |netrw-S|
-	   t	Enter the file/directory under the cursor in a new tab|netrw-t|
-	   u	Change to recently-visited directory                 |netrw-u|
-	   U	Change to subsequently-visited directory             |netrw-U|
-	   v	Enter the file/directory under the cursor in a new   |netrw-v|
-	   	browser window.  A vertical split is used.
-	   x	View file with an associated program                 |netrw-x|
-
-	<leftmouse>	(gvim only) selects word under mouse as if a <cr>
-			had been pressed (ie. edit file, change directory)
-	<middlemouse>	(gvim only) same as P selecting word under mouse;
-			see |netrw-P|
-	<rightmouse>	(gvim only) delete file/directory using word under
-			mouse
-	<2-leftmouse>	(gvim only) when:
-	                 * in a netrw-selected file, AND
-		         * |g:netrw_retmap| == 1     AND
-		         * the user doesn't already have a <2-leftmouse> mapping
-			   defined before netrw is autoloaded,
-			then a double clicked leftmouse button will return
-			to the netrw browser window.
-	<s-leftmouse>	(gvim only) like mf, will mark files
-
-QUICK REFERENCE: COMMANDS	*netrw-explore-cmds* *netrw-browse-cmds* {{{2
-     :NetrwClean[!] ...........................................|netrw-clean|
-     :NetrwSettings ...........................................|netrw-settings|
-     :Explore[!]  [dir] Explore directory of current file......|netrw-explore|
-     :Hexplore[!] [dir] Horizontal Split & Explore.............|netrw-explore|
-     :Nexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
-     :Pexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
-     :Rexplore          Return to Explorer.....................|netrw-explore|
-     :Sexplore[!] [dir] Split & Explore directory .............|netrw-explore|
-     :Texplore[!] [dir] Tab & Explore..........................|netrw-explore|
-     :Vexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
-
-BOOKMARKING A DIRECTORY	*netrw-mb* *netrw-bookmark* *netrw-bookmarks* {{{2
-One may easily "bookmark" a directory by using >
-
-	{cnt}mb
-<
-Any count may be used.  One may use viminfo's "!" option to retain bookmarks
-between vim sessions.  See |netrw-gb| for how to return to a bookmark and
-|netrw-qb| for how to list them.
-
-
-BROWSING						*netrw-cr* {{{2
-
-Browsing is simple: move the cursor onto a file or directory of interest.
-Hitting the <cr> (the return key) will select the file or directory.
-Directories will themselves be listed, and files will be opened using the
-protocol given in the original read request.  
-
-  CAVEAT: There are four forms of listing (see |netrw-i|).  Netrw assumes that
-  two or more spaces delimit filenames and directory names for the long and
-  wide listing formats.  Thus, if your filename or directory name has two or
-  more sequential spaces embedded in it, or any trailing spaces, then you'll
-  need to use the "thin" format to select it.
-
-The |g:netrw_browse_split| option, which is zero by default, may be used to
-cause the opening of files to be done in a new window or tab instead of the
-default.  When the option is one or two, the splitting will be taken
-horizontally or vertically, respectively.  When the option is set to three, a
-<cr> will cause the file to appear in a new tab.
-
-
-When using the gui (gvim) one may select a file by pressing the <leftmouse>
-button.  In addtion, if
-
- *|g:netrw_retmap| == 1      AND   (its default value is 0)
- * in a netrw-selected file, AND
- * the user doesn't already have a <2-leftmouse> mapping defined before
-   netrw is loaded
-
-then a doubly-clicked leftmouse button will return to the netrw browser
-window.
-
-Netrw attempts to speed up browsing, especially for remote browsing where one
-may have to enter passwords, by keeping and re-using previously obtained
-directory listing buffers.  The |g:netrw_fastbrowse| variable is used to
-control this behavior; one may have slow browsing (no buffer re-use), medium
-speed browsing (re-use directory buffer listings only for remote directories),
-and fast browsing (re-use directory buffer listings as often as possible).
-The price for such re-use is that when changes are made (such as new files
-are introduced into a directory), the listing may become out-of-date.  One may
-always refresh directory listing buffers by pressing ctrl-L (see
-|netrw-ctrl-l|).
-
-
-Related topics: |netrw-o| |netrw-p| |netrw-P| |netrw-t| |netrw-v|
-Associated setting variables: |g:netrw_browse_split|      |g:netrw_fastbrowse|
-                              |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd|
-			      |g:netrw_ftp_timelist_cmd|  |g:netrw_ssh_cmd|
-			      |g:netrw_ssh_browse_reject| |g:netrw_use_noswf|
-
-
-BROWSING WITH A HORIZONTALLY SPLIT WINDOW	*netrw-o* *netrw-horiz* {{{2
-
-Normally one enters a file or directory using the <cr>.  However, the "o" map
-allows one to open a new window to hold the new directory listing or file.  A
-horizontal split is used.  (for vertical splitting, see |netrw-v|)
-
-Normally, the o key splits the window horizontally with the new window and
-cursor at the top.  To change to splitting the window horizontally with the
-new window and cursor at the bottom, have
-
-	let g:netrw_alto = 1
-
-in your <.vimrc>.  (also see |netrw-t| |netrw-v|)
-
-There is only one tree listing buffer; using "o" on a displayed subdirectory 
-will split the screen, but the same buffer will be shown twice.
-
-Associated setting variables: |g:netrw_alto| |g:netrw_winsize|
-
-
-BROWSING WITH A NEW TAB				*netrw-t* {{{2
-
-Normally one enters a file or directory using the <cr>.  The "t" map
-allows one to open a new window hold the new directory listing or file in a
-new tab. (also see: |netrw-o| |netrw-v|)
-
-
-BROWSING WITH A VERTICALLY SPLIT WINDOW			*netrw-v* {{{2
-
-Normally one enters a file or directory using the <cr>.  However, the "v" map
-allows one to open a new window to hold the new directory listing or file.  A
-vertical split is used.  (for horizontal splitting, see |netrw-o|)
-
-Normally, the v key splits the window vertically with the new window and
-cursor at the left.  To change to splitting the window vertically with the new
-window and cursor at the right, have
-
-	let g:netrw_altv = 1
-
-in your <.vimrc>.  (also see: |netrw-o| |netrw-t|)
-
-There is only one tree listing buffer; using "v" on a displayed subdirectory 
-will split the screen, but the same buffer will be shown twice.
-
-Associated setting variable: |g:netrw_altv| |g:netrw_winsize|
-
-CHANGE LISTING STYLE					*netrw-i* {{{2
-
-The "i" map cycles between the thin, long, wide, and tree listing formats.
-
-The short listing format gives just the files' and directories' names.
-
-The long listing is either based on the "ls" command via ssh for remote
-directories or displays the filename, file size (in bytes), and the time and
-date of last modification for local directories.  With the long listing
-format, netrw is not able to recognize filenames which have trailing spaces.
-Use the thin listing format for such files.
-
-The wide listing format uses two or more contiguous spaces to delineate
-filenames; when using that format, netrw won't be able to recognize or use
-filenames which have two or more contiguous spaces embedded in the name or any
-trailing spaces.  The thin listing format will, however, work with such files.
-This listing format is the most compact.
-
-The tree listing format has a top directory followed by files and directories
-preceded by a "|".  One may open and close directories by pressing the <cr>
-key while atop the directory name.  There is only one tree listing buffer;
-hence, using "v" or "o" on a subdirectory will only show the same buffer,
-twice.
-
-Associated setting variables: |g:netrw_liststyle| |g:netrw_maxfilenamelen|
-                              |g:netrw_timefmt|   |g:netrw_list_cmd|
-
-
-CHANGING TO A BOOKMARKED DIRECTORY			*netrw-gb*  {{{2
-
-To change directory back to a bookmarked directory, use
-
-	{cnt}gb
-
-Any count may be used to reference any of the bookmarks.  See |netrw-mb| on
-how to bookmark a directory and |netrw-qb| on how to list bookmarks.
-
-
-CHANGING TO A PREDECESSOR DIRECTORY	*netrw-u* *netrw-updir* {{{2
-
-Every time you change to a new directory (new for the current session),
-netrw will save the directory in a recently-visited directory history
-list (unless g:netrw_dirhistmax is zero; by default, it's ten).  With the
-"u" map, one can change to an earlier directory (predecessor).  To do
-the opposite, see |netrw-U|.
-
-
-CHANGING TO A SUCCESSOR DIRECTORY		*netrw-U* *netrw-downdir* {{{2
-
-With the "U" map, one can change to a later directory (successor).
-This map is the opposite of the "u" map. (see |netrw-u|)  Use the
-q map to list both the bookmarks and history. (see |netrw-qb|)
-
-
-NETRW CLEAN					*netrw-clean* *:NetrwClean*
-
-With :NetrwClean one may easily remove netrw from one's home directory;
-more precisely, from the first directory on your |'runtimepath'|.
-
-With :NetrwClean!, netrw will remove netrw from all directories on your
-|'runtimepath'|.
-
-With either form of the command, netrw will first ask for confirmation
-that the removal is in fact what you want to do.  If netrw doesn't have
-permission to remove a file, it will issue an error message.
-
-						*netrw-gx*
-CUSTOMIZING BROWSING WITH A USER FUNCTION	*netrw-x* *netrw-handler* {{{2
-						(also see |netrw_filehandler|)
-
-Certain files, such as html, gif, jpeg, (word/office) doc, etc, files, are
-best seen with a special handler (ie. a tool provided with your computer).
-Netrw allows one to invoke such special handlers by: >
-
-	* when Exploring, hit the "x" key
-	* when editing, hit gx with the cursor atop the special filename
-<	  (not available if the |g:netrw_nogx| variable exists)
-
-Netrw determines which special handler by the following method:
-
-  * if |g:netrw_browsex_viewer| exists, then it will be used to attempt to
-    view files.  Examples of useful settings (place into your <.vimrc>): >
-
-	:let g:netrw_browsex_viewer= "kfmclient exec"
-<   or >
-	:let g:netrw_browsex_viewer= "gnome-open"
-<
-    If g:netrw_browsex_viewer == '-', then netrwFileHandler() will be
-    invoked first (see |netrw_filehandler|).
-
-  * for Windows 32 or 64, the url and FileProtocolHandler dlls are used.  
-  * for Gnome (with gnome-open): gnome-open is used.
-  * for KDE (with kfmclient)   : kfmclient is used.
-  * for Mac OS X               : open is used.
-  * otherwise the netrwFileHandler plugin is used.
-
-The file's suffix is used by these various approaches to determine an
-appropriate application to use to "handle" these files.  Such things as
-OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript (*.ps,
-*.eps) can be handled.
-
-							*netrw_filehandler*
-
-The "x" map applies a function to a file, based on its extension.  Of course,
-the handler function must exist for it to be called!
->
- Ex. mypgm.html   x ->
-                  NFH_html("scp://user@host/some/path/mypgm.html")
-<
-Users may write their own netrw File Handler functions to support more
-suffixes with special handling.  See <plugin/netrwFileHandlers.vim> for
-examples on how to make file handler functions.   As an example: >
-
-	" NFH_suffix(filename)
-	fun! NFH_suffix(filename)
-	..do something special with filename..
-	endfun
-<
-These functions need to be defined in some file in your .vim/plugin
-(vimfiles\plugin) directory.  Vim's function names may not have punctuation
-characters (except for the underscore) in them.  To support suffices that
-contain such characters, netrw will first convert the suffix using the
-following table: >
-
-    @ -> AT       ! -> EXCLAMATION    % -> PERCENT  
-    : -> COLON    = -> EQUAL          ? -> QUESTION 
-    , -> COMMA    - -> MINUS          ; -> SEMICOLON
-    $ -> DOLLAR   + -> PLUS           ~ -> TILDE    
-<    
-So, for example: >
-
-	file.rcs,v  ->  NFH_rcsCOMMAv()
-<
-If more such translations are necessary, please send me email: >
-		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
-with a request.
-
-Associated setting variable: |g:netrw_browsex_viewer|
-
-							*netrw-curdir*
-DELETING FILES OR DIRECTORIES	*netrw-delete* *netrw-D* *netrw-del* {{{2
-
-If files have not been marked with |netrw-mf|:   (local marked file list)
-
-    Deleting/removing files and directories involves moving the cursor to the
-    file/directory to be deleted and pressing "D".  Directories must be empty
-    first before they can be successfully removed.  If the directory is a
-    softlink to a directory, then netrw will make two requests to remove the
-    directory before succeeding.  Netrw will ask for confirmation before doing
-    the removal(s).  You may select a range of lines with the "V" command
-    (visual selection), and then pressing "D".
-
-If files have been marked with |netrw-mf|:   (local marked file list)
-
-    Marked files (and empty directories) will be deleted; again, you'll be
-    asked to confirm the deletion before it actually takes place.
-
-The |g:netrw_rm_cmd|, |g:netrw_rmf_cmd|, and |g:netrw_rmdir_cmd| variables are
-used to control the attempts to remove files and directories.  The
-g:netrw_rm_cmd is used with files, and its default value is:
-
-	g:netrw_rm_cmd: ssh HOSTNAME rm
-
-The g:netrw_rmdir_cmd variable is used to support the removal of directories.
-Its default value is:
-
-	g:netrw_rmdir_cmd: ssh HOSTNAME rmdir
-
-If removing a directory fails with g:netrw_rmdir_cmd, netrw then will attempt
-to remove it again using the g:netrw_rmf_cmd variable.  Its default value is:
-
-	g:netrw_rmf_cmd: ssh HOSTNAME rm -f
-
-Associated setting variable: |g:netrw_local_rmdir| |g:netrw_rm_cmd|
-                             |g:netrw_rmdir_cmd|   |g:netrw_ssh_cmd|
-
-
-*netrw-explore*  *netrw-hexplore* *netrw-nexplore* *netrw-pexplore*
-*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore*
-DIRECTORY EXPLORATION COMMANDS  {{{2
-
-     :Explore[!]   [dir]... Explore directory of current file       *:Explore*
-     :Hexplore[!]  [dir]... Horizontal Split & Explore              *:Hexplore*
-     :Rexplore          ... Return to Explorer                      *:Rexplore*
-     :Sexplore[!]  [dir]... Split&Explore directory of current file *:Sexplore*
-     :Texplore     [dir]... Tab              & Explore              *:Texplore*
-     :Vexplore[!]  [dir]... Vertical   Split & Explore              *:Vexplore*
-
-     Used with :Explore **/pattern : (also see |netrw-starstar|)
-     :Nexplore............. go to next matching file                *:Nexplore*
-     :Pexplore............. go to previous matching file            *:Pexplore*
-
-:Explore  will open the local-directory browser on the current file's
-          directory (or on directory [dir] if specified).  The window will be
-	  split only if the file has been modified, otherwise the browsing
-	  window will take over that window.  Normally the splitting is taken
-	  horizontally.
-:Explore! is like :Explore, but will use vertical splitting.
-:Sexplore will always split the window before invoking the local-directory
-          browser.  As with Explore, the splitting is normally done
-	  horizontally.
-:Sexplore! [dir] is like :Sexplore, but the splitting will be done vertically.
-:Hexplore  [dir] does an :Explore with |:belowright| horizontal splitting.
-:Hexplore! [dir] does an :Explore with |:aboveleft|  horizontal splitting.
-:Vexplore  [dir] does an :Explore with |:leftabove|  vertical splitting.
-:Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
-:Texplore  [dir] does a tabnew before generating the browser window
-
-By default, these commands use the current file's directory.  However, one
-may explicitly provide a directory (path) to use.
-
-The |g:netrw_winsize| variable also is used, if specified by the user, to
-size Hexplore and Vexplore windows.
-
-:Rexplore  This command is a little different from the others.  When one
-           edits a file, for example by pressing <cr> when atop a file in
-	   a netrw browser window, :Rexplore will return the display to
-	   that of the last netrw browser window.  Its a command version
-	   of <2-leftmouse> (which is only available under gvim and
-	   cooperative terms).
-
-
-*netrw-star* *netrw-starpat* *netrw-starstar* *netrw-starstarpat*
-EXPLORING WITH STARS AND PATTERNS
-
-When Explore, Sexplore, Hexplore, or Vexplore are used with one of the
-following four styles, Explore generates a list of files which satisfy
-the request. >
-
-    */filepat	files in current directory which satisfy filepat
-    **/filepat	files in current directory or below which satisfy the
-    		file pattern
-    *//pattern	files in the current directory which contain the
-    		pattern (vimgrep is used)
-    **//pattern	files in the current directory or below which contain
-    		the pattern (vimgrep is used)
-<
-The cursor will be placed on the first file in the list.  One may then
-continue to go to subsequent files on that list via |:Nexplore| or to
-preceding files on that list with |:Pexplore|.  Explore will update the
-directory and place the cursor appropriately.
-
-A plain >
-	:Explore
-will clear the explore list.
-
-If your console or gui produces recognizable shift-up or shift-down sequences,
-then you'll likely find using shift-downarrow and shift-uparrow convenient.
-They're mapped by netrw:
-
-	<s-down>  == Nexplore, and
-	<s-up>    == Pexplore.
-
-As an example, consider
->
-	:Explore */*.c
-	:Nexplore
-	:Nexplore
-	:Pexplore
-<
-The status line will show, on the right hand side of the status line, a
-message like "Match 3 of 20".
-
-Associated setting variables: |g:netrw_keepdir|      |g:netrw_browse_split|
-                              |g:netrw_fastbrowse|   |g:netrw_ftp_browse_reject|
-			      |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd|
-			      |g:netrw_ftp_timelist_cmd| |g:netrw_list_cmd|
-			      |g:netrw_liststyle|
-
-
-DISPLAYING INFORMATION ABOUT FILE				*netrw-qf* {{{2
-
-With the cursor atop a filename, pressing "qf" will reveal the file's size
-and last modification timestamp.  Currently this capability is only available
-for local files.
-
-
-EDIT FILE OR DIRECTORY HIDING LIST	*netrw-ctrl-h* *netrw-edithide* {{{2
-
-The "<ctrl-h>" map brings up a requestor allowing the user to change the
-file/directory hiding list.  The hiding list consists of one or more patterns
-delimited by commas.  Files and/or directories satisfying these patterns will
-either be hidden (ie. not shown) or be the only ones displayed (see
-|netrw-a|).
-
-Associated setting variable: |g:netrw_hide|
-
-
-EDITING THE SORTING SEQUENCE		*netrw-S* *netrw-sortsequence* {{{2
-
-When "Sorted by" is name, one may specify priority via the sorting sequence
-(g:netrw_sort_sequence).  The sorting sequence typically prioritizes the
-name-listing by suffix, although any pattern will do.  Patterns are delimited
-by commas.  The default sorting sequence is (all one line):
->
-	'[\/]$,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,
-	\.swp$,\.bak$,\~$'
-<
-The lone * is where all filenames not covered by one of the other patterns
-will end up.  One may change the sorting sequence by modifying the
-g:netrw_sort_sequence variable (either manually or in your <.vimrc>) or by
-using the "S" map.
-
-Related topics:              |g:netrw-s| |g:netrw-S|
-Associated setting variable: |g:netrw_sort_sequence|
-
-
-GOING UP							*netrw--* {{{2
-
-To go up a directory, press "-" or press the <cr> when atop the ../ directory
-entry in the listing.
-
-Netrw will use the command in |g:netrw_list_cmd| to perform the directory
-listing operation after changing HOSTNAME to the host specified by the
-user-provided url.  By default netrw provides the command as:
-
-	ssh HOSTNAME ls -FLa
-
-where the HOSTNAME becomes the [user@]hostname as requested by the attempt to
-read.  Naturally, the user may override this command with whatever is
-preferred.  The NetList function which implements remote browsing
-expects that directories will be flagged by a trailing slash.
-
-
-HIDING FILES OR DIRECTORIES			*netrw-a* *netrw-hiding* {{{2
-
-Netrw's browsing facility allows one to use the hiding list in one of three
-ways: ignore it, hide files which match, and show only those files which
-match.
-
-If no files have been marked via |netrw-mf|:
-
-The "a" map allows the user to cycle through the three hiding modes.
-
-The |g:netrw_list_hide| variable holds a comma delimited list of patterns
-based on regular expressions (ex. ^.*\.obj$,^\.) which specify the hiding list.
-(also see |netrw-ctrl-h|)  To set the hiding list, use the <c-h> map.  As an
-example, to hide files which begin with a ".", one may use the <c-h> map to
-set the hiding list to '^\..*' (or one may put let g:netrw_list_hide= '^\..*'
-in one's <.vimrc>).  One may then use the "a" key to show all files, hide
-matching files, or to show only the matching files.
-
-	Example: \.[ch]$
-		This hiding list command will hide/show all *.c and *.h files.
-
-	Example: \.c$,\.h$
-		This hiding list command will also hide/show all *.c and *.h
-		files.
-
-Don't forget to use the "a" map to select the mode (normal/hiding/show) you
-want!
-
-If files have been marked using |netrw-mf|, then this command will:
-
-  if showing all files or non-hidden files:
-   modify the g:netrw_list_hide list by appending the marked files to it
-   and showing only non-hidden files.
-
-  else if showing hidden files only:
-   modify the g:netrw_list_hide list by removing the marked files from it
-   and showing only non-hidden files.
-  endif
-
-					*netrw-gh*
-As a quick shortcut, one may press >
-	gh
-to toggle between hiding files which begin with a period (dot) or not.
-
-Associated setting variable: |g:netrw_list_hide|
-
-					*netrw-ctrl_h*
-IMPROVING BROWSING			*netrw-listhack* *netrw-ssh-hack* {{{2
-
-Especially with the remote directory browser, constantly entering the password
-is tedious.
-
-For Linux/Unix systems, the book "Linux Server Hacks - 100 industrial strength
-tips & tools" by Rob Flickenger (O'Reilly, ISBN 0-596-00461-3) gives a tip
-for setting up no-password ssh and scp and discusses associated security
-issues.  It used to be available at http://hacks.oreilly.com/pub/h/66 ,
-but apparently that address is now being redirected to some "hackzine".
-I'll attempt a summary:
-
-	1. Generate a public/private key pair on the ssh server:
-	   ssh-keygen -t rsa
-	   (saving the file in ~/.ssh/id_rsa is ok)
-	2. Just hit the <CR> when asked for passphrase (twice).
-	3. This creates two files:
-	     ~/.ssh/id_rsa
-	     ~/.ssh/id_rsa.pub
-	4. On the client:
-	    cd
-	    mkdir .ssh
-	    chmod 0700 .ssh
-	    scp {serverhostname}:.ssh/id_rsa.pub .
-	    cat id_rsa.pub >> .ssh/authorized_keys2
-
-For Windows, folks on the vim mailing list have mentioned that Pageant helps
-with avoiding the constant need to enter the password.
-
-Kingston Fung wrote about another way to avoid constantly needing to enter
-passwords:
-
-    In order to avoid the need to type in the password for scp each time, you
-    provide a hack in the docs to set up a non password ssh account. I found a
-    better way to do that: I can use a regular ssh account which uses a
-    password to access the material without the need to key-in the password
-    each time. It's good for security and convenience. I tried ssh public key
-    authorization + ssh-agent, implementing this, and it works! Here are two
-    links with instructions:
-
-    http://www.ibm.com/developerworks/library/l-keyc2/
-    http://sial.org/howto/openssh/publickey-auth/
-
-
-LISTING BOOKMARKS AND HISTORY		*netrw-qb* *netrw-listbookmark* {{{2
-
-Pressing "qb" (query bookmarks) will list the bookmarked directories and
-directory traversal history (query).
-
-(see |netrw-mb|, |netrw-gb|, |netrw-u|, and |netrw-U|)
-
-
-MAKING A NEW DIRECTORY					*netrw-d* {{{2
-
-With the "d" map one may make a new directory either remotely (which depends
-on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
-global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
-directory's name.  A bare <CR> at that point will abort the making of the
-directory.  Attempts to make a local directory that already exists (as either
-a file or a directory) will be detected, reported on, and ignored.
-
-Associated setting variable: |g:netrw_local_mkdir| |g:netrw_mkdir_cmd|
-
-
-MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* {{{2
-
-By default, |g:netrw_keepdir| is 1.  This setting means that the current
-directory will not track the browsing directory.
-
-Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
-track netrw's browsing directory.
-
-However, given the default setting for g:netrw_keepdir of 1 where netrw
-maintains its own separate notion of the current directory, in order to make
-the two directories the same, use the "c" map (just type c).  That map will
-set Vim's notion of the current directory to netrw's current browsing
-directory.
-
-Associated setting variable: |g:netrw_keepdir|
-
-
-MARKED FILES: ARBITRARY COMMAND				*netrw-mx* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the local marked-file list)
-
-Upon activation of the "mx" map, netrw will query the user for some command to
-be applied to all marked files.  All %s in the command will be substituted
-with the name of a marked file.  If no %s are in the command, then the command
-will be followed by a space and a marked filename.
-
-
-MARKED FILES: COMPRESSION AND DECOMPRESSION		*netrw-mz* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the local marked file list)
-
-If any marked files are compressed,   then "mz" will decompress them.
-If any marked files are decompressed, then "mz" will compress them
-using the command specified by |g:netrw_compress|; by default,
-that's "gzip".
-
-For decompression, netrw provides a |Dictionary| of suffices and their
-associated decompressing utilities; see |g:netrw_decompress|.
-
-Associated setting variables: |g:netrw_compress| |g:netrw_decompress|
-
-MARKED FILES: COPYING						*netrw-mc* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (Uses the global marked file list)
-
-Select a target directory with mt (|netrw-mt|).  Then change directory,
-select file(s) (see |netrw-mf|), and press "mc".
-
-Associated setting variable: |g:netrw_localcopycmd| |g:netrw_ssh_cmd|
-
-MARKED FILES: DIFF						*netrw-md* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the global marked file list)
-
-Use |vimdiff| to visualize difference between selected files (two or
-three may be selected for this).  Uses the global marked file list.
-
-MARKED FILES: EDITING						*netrw-me* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the global marked file list)
-
-This command will place the marked files on the |arglist| and commence
-editing them.  One may return the to explorer window with |:Rexplore|.
-
-MARKED FILES: HIDING AND UNHIDING BY SUFFIX			*netrw-mh* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the local marked file list)
-
-This command extracts the suffices of the marked files and toggles their
-presence on the hiding list.  Please note that marking the same suffix
-this way multiple times will result in the suffix's presence being toggled
-for each file (so an even quantity of marked files having the same suffix
-is the same as not having bothered to select them at all).
-
-Related topics: |netrw-a| |g:netrw_list_hide|
-
-MARKED FILES: MOVING						*netrw-mm* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the global marked file list)
-
-Select a target directory with mT (|netrw-mt|).  Then change directory,
-select file(s) (see |netrw-mf|), and press "mm".
-
-Associated setting variable: |g:netrw_localmovecmd| |g:netrw_ssh_cmd|
-
-MARKED FILES: PRINTING						*netrw-mp* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the local marked file list)
-
-Netrw will apply the |:hardcopy| command to marked files.  What it does
-is open each file in a one-line window, execute hardcopy, then close the
-one-line window.
-
-
-MARKED FILES: SOURCING						*netrw-ms* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the local marked file list)
-
-Netrw will source the marked files (using vim's |:source| command)
-
-
-MARKED FILES: TAGGING						*netrw-mT* {{{2
-	    (See |netrw-mf| and |netrw-mr| for how to mark files)
-		      (uses the global marked file list)
-
-The "mt" mapping will apply the command in |g:netrw_ctags| (by default, its
-"ctags") to marked files.  For remote browsing, in order to create a tags file
-netrw will use ssh (see |g:netrw_ssh_cmd|), and so ssh must be available for
-this to work on remote systems.  For your local system, see |ctags| on how to
-get a version.  I myself use hdrtags, currently available at
-http://mysite.verizon.net/astronaut/src/index.html , and have >
-
-	let g:netrw_ctags= "hdrtag"
-<
-in my <.vimrc>.
-
-When a remote set of files are tagged, the resulting tags file is "obtained";
-ie. a copy is transferred to the local system's directory.  The local tags
-file is then modified so that one may use it through the network.  The
-modification is concerns the names of the files in the tags; each filename is
-preceded by the netrw-compatible url used to obtain it.  When one subsequently
-uses one of the go to tag actions (|tags|), the url will be used by netrw to
-edit the desired file and go to the tag.
-
-Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|
-
-
-MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
-     (See |netrw-mf| and |netrw-mr| for how to mark files)
-
-Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
-
-  * if the cursor is atop a file name, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
-
-  * also, if the cursor is in the banner, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
-
-  * however, if the cursor is atop a directory name, then that directory is
-    used for the copy/move-to target
-
-There is only one copy/move-to target per vim session; ie. the target is a
-script variable (see |s:var|) and is shared between all netrw windows (in an
-instance of vim).
-
-MARKED FILES: UNMARKING						*netrw-mu* {{{2
-     (See |netrw-mf| and |netrw-mr| for how to mark files)
-
-The "mu" mapping will unmark all currently marked files.
-
-
-MARKING FILES							*netrw-mf* {{{2
-	(also see |netrw-mr|)
-
-One may mark files with the cursor atop a filename and then pressing "mf".
-With gvim, one may also mark files with <s-leftmouse>.  The following netrw
-maps make use of marked files:
-
-    |netrw-a|	Hide marked files/directories
-    |netrw-D|	Delete marked files/directories
-    |netrw-mc|	Copy marked files to target
-    |netrw-md|	Apply vimdiff to marked files
-    |netrw-me|	Edit marked files
-    |netrw-mm|	Move marked files
-    |netrw-mp|	Print marked files
-    |netrw-mt|	Set target for |netrw-mm| and |netrw-mc|
-    |netrw-mT|	Generate tags using marked files
-    |netrw-mx|	Apply shell command to marked files
-    |netrw-mz|	Compress/Decompress marked files
-    |netrw-O|	Obtain marked files
-    |netrw-R|	Rename marked files
-
-One may unmark files one at a time the same way one marks them; ie. place
-the cursor atop a marked file and press "mf".  This process also works
-with <s-leftmouse> using gvim.  One may unmark all files by pressing
-"mu" (see |netrw-mu|).
-
-*markfilelist* *global_markfilelist* *local_markfilelist*
-All marked files are entered onto the global marked file list; there is only
-one such list.  In addition, every netrw buffer also has its own local marked
-file list; since netrw buffers are associated with specific directories, this
-means that each directory has its own local marked file list.  The various
-commands which operate on marked files use one or the other of the marked file
-lists.
-
-
-MARKING FILES BY REGULAR EXPRESSION				*netrw-mr* {{{2
-	(also see |netrw-mf|)
-
-One may also mark files by pressing "mr"; netrw will then issue a prompt,
-"Enter regexp: ".  You may then enter a regular expression such as \.c$ .
-All files in the current directory will then be marked.  Note that the
-regular expressions are vim-style |regexp| ones, not shell ones.  So
-entering *.c probably isn't what you want!
-
-
-NETRW BROWSER VARIABLES		*netrw-browser-options* *netrw-browser-var* {{{2
-
-(if you're interestd in the netrw file transfer settings, see |netrw-options|)
-
-The <netrw.vim> browser provides settings in the form of variables which
-you may modify; by placing these settings in your <.vimrc>, you may customize
-your browsing preferences.  (see also: |netrw-settings|)
->
-   ---				-----------
-   Var				Explanation
-   ---				-----------
-< *g:netrw_alto*		change from above splitting to below splitting
-				by setting this variable (see |netrw-o|)
-				 default: =&sb           (see |'sb'|)
-
-  *g:netrw_altv*		change from left splitting to right splitting
-				by setting this variable (see |netrw-v|)
-				 default: =&spr          (see |'spr'|)
-
-  *g:netrw_browse_split*	when browsing, <cr> will open the file by:
-				=0: re-using the same window
-				=1: horizontally splitting the window first  
-				=2: vertically   splitting the window first  
-				=3: open file in new tab
-				=4: act like "P" (ie. open previous window)
-
-  *g:netrw_browsex_viewer*	specify user's preference for a viewer: >
-					"kfmclient exec"
-					"gnome-open"
-<				If >
-					"-"
-<				is used, then netrwFileHandler() will look for
-				a script/function to handle the given
-				extension.  (see |netrw_filehandler|).
-
-  *g:netrw_cd_escape*		="[]#*$%'\" ?`!&();<>\\"
-  				This option is used to escape directory names
-				before changing directory to them.
-
-  *g:netrw_compress*		="gzip"
-				    Will compress marked files with this
-				    command
-
-  *g:netrw_decompress*		= { ".gz" : "gunzip" ,
-				    ".bz2" : "bunzip2" ,
-				    ".zip" : "unzip" ,
-				    ".tar" : "tar -xf"}
-				  A dictionary mapping suffices to
-				  decompression programs.
-
-  *g:netrw_fastbrowse*		=0: slow speed browsing, never re-use
-				    directory listings; always obtain
-				    directory listings.
-				=1: medium speed browsing, re-use directory
-				    listings only when remote browsing.
-				    (default value)
-				=2: fast browsing, only obtains directory
-				    listings when the directory hasn't been
-				    seen before (or |netrw-ctrl-l| is used).
-				Fast browsing retains old directory listing
-				buffers so that they don't need to be
-				re-acquired.  This feature is especially
-				important for remote browsing.  However, if
-				a file is introduced or deleted into or from
-				such directories, the old directory buffer
-				becomes out-of-date.  One may always refresh
-				such a directory listing with |netrw-ctrl-l|.
-				This option gives the choice of the trade-off
-				between accuracy and speed to the user.
-
-  *g:netrw_fname_escape*	=' ?&;%'
-  				Used on filenames before remote reading/writing
-
-  *g:netrw_ftp_browse_reject*	ftp can produce a number of errors and warnings
-				that can show up as "directories" and "files"
-				in the listing.  This pattern is used to
-				remove such embedded messages.  By default its
-				value is:
-				 '^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$'
-
-  *g:netrw_ftp_list_cmd*	options for passing along to ftp for directory
-				listing.  Defaults:
-				 unix or g:netrw_cygwin set: : "ls -lF"
-				 otherwise                     "dir"
-
-
-  *g:netrw_ftp_sizelist_cmd*	options for passing along to ftp for directory
-				listing, sorted by size of file.
-				Defaults:
-				 unix or g:netrw_cygwin set: : "ls -slF"
-				 otherwise                     "dir"
-
-  *g:netrw_ftp_timelist_cmd*	options for passing along to ftp for directory
-				listing, sorted by time of last modification.
-				Defaults:
-				 unix or g:netrw_cygwin set: : "ls -tlF"
-				 otherwise                     "dir"
-
-  *g:netrw_glob_escape*		='[]*?`{~$'
-  				These characters in directory names are
-				escaped before applying glob()
-
-  *g:netrw_hide*		if true, the hiding list is used
-				 default: =0
-
-  *g:netrw_keepdir*		=1 (default) keep current directory immune from
-				   the browsing directory.
-				=0 keep the current directory the same as the
-				   browsing directory.
-				The current browsing directory is contained in
-				b:netrw_curdir (also see |netrw-c|)
-
-  *g:netrw_list_cmd*		command for listing remote directories
-				 default: (if ssh is executable)
-				          "ssh HOSTNAME ls -FLa"
-
-  *g:netrw_liststyle*		Set the default listing style:
-                                = 0: thin listing (one file per line)
-                                = 1: long listing (one file per line with time
-				     stamp information and file size)
-				= 2: wide listing (multiple files in columns)
-				= 3: tree style listing
-  *g:netrw_list_hide*		comma separated pattern list for hiding files
-				Patterns are regular expressions (see |regexp|)
-				Example: let g:netrw_list_hide= '.*\.swp$'
-				 default: ""
-
-  *g:netrw_localcopycmd*	="cp" Linux/Unix/MacOS/Cygwin
-  				="copy" Windows
-				Copies marked files (|netrw-mf|) to target
-				directory (|netrw-mt|, |netrw-mc|)
-
-  *g:netrw_localmovecmd*	="mv" Linux/Unix/MacOS/Cygwin
-  				="move" Windows
-				Moves marked files (|netrw-mf|) to target
-				directory (|netrw-mt|, |netrw-mm|)
-
-  *g:netrw_local_mkdir*		command for making a local directory
-				 default: "mkdir"
-
-  *g:netrw_local_rmdir*		remove directory command (rmdir)
-				 default: "rmdir"
-
-  *g:netrw_maxfilenamelen*	=32 by default, selected so as to make long
-				    listings fit on 80 column displays.
-				If your screen is wider, and you have file
-				or directory names longer than 32 bytes,
-				you may set this option to keep listings
-				columnar.
-
-  *g:netrw_mkdir_cmd*		command for making a remote directory
-				 default: "ssh USEPORT HOSTNAME mkdir"
-
-  *g:netrw_retmap*		if it exists and is set to one, then
-				<2-leftmouse> will be mapped for easy
-				return to the netrw browser window.
-				(example: click once to select and open
-				a file, double-click to return)
-				  default: =0
-
-  *g:netrw_rm_cmd*		command for removing files
-				 default: "ssh USEPORT HOSTNAME rm"
-
-  *g:netrw_rmdir_cmd*		command for removing directories
-				 default: "ssh USEPORT HOSTNAME rmdir"
-
-  *g:netrw_rmf_cmd*		 command for removing softlinks
-				 default: "ssh USEPORT HOSTNAME rm -f"
-
-  *g:netrw_sort_by*		sort by "name", "time", or "size"
-				 default: "name"
-
-  *g:netrw_sort_direction*	sorting direction: "normal" or "reverse"
-				 default: "normal"
-
-  *g:netrw_sort_sequence*	when sorting by name, first sort by the
-				comma-separated pattern sequence
-				 default: '[\/]$,*,\.bak$,\.o$,\.h$,
-				           \.info$,\.swp$,\.obj$'
-
-  *g:netrw_special_syntax*	If true, then certain files will be shown
-  				in special syntax in the browser:
-
-					netrwBak     : *.bak
-					netrwCompress: *.gz *.bz2 *.Z *.zip
-					netrwData    : *.dat
-					netrwHdr     : *.h
-					netrwLib     : *.a *.so *.lib *.dll
-					netrwMakefile: [mM]akefile *.mak
-					netrwObj     : *.o *.obj
-					netrwTags    : tags ANmenu ANtags
-					netrwTilde   : *~ 
-					netrwTmp     : tmp* *tmp
-
-				These syntax highlighting groups are linked
-				to Folded or DiffChange by default
-				(see |hl-Folded| and |hl-DiffChange|), but
-				one may put lines like >
-					hi link netrwCompress Visual
-<				into one's <.vimrc> to use one's own
-				preferences.
-
-  *g:netrw_ssh_cmd*		One may specify an executable command
-				to use instead of ssh for remote actions
-				such as listing, file removal, etc.
-				 default: ssh
-
-  *g:netrw_ssh_browse_reject*	ssh can sometimes produce unwanted lines,
-				messages, banners, and whatnot that one doesn't
-				want masquerading as "directories" and "files".
-				Use this pattern to remove such embedded
-				messages.  By default its value is:
-					 '^total\s\+\d\+$'
-
-
-  *g:netrw_tmpfile_escape*	=' &;'
-  				escape() is applied to all temporary files
-				to escape these characters.
-
-  *g:netrw_timefmt*		specify format string to vim's strftime().
-				The default, "%c", is "the preferred date
-				and time representation for the current
-				locale" according to my manpage entry for
-				strftime(); however, not all are satisfied
-				with it.  Some alternatives:
-				 "%a %d %b %Y %T",
-				 " %a %Y-%m-%d  %I-%M-%S %p"
-				 default: "%c"
-
-  *g:netrw_use_noswf*		netrw normally avoids writing swapfiles
-  				for browser buffers.  However, under some
-				systems this apparently is causing nasty
-				ml_get errors to appear; if you're getting
-				ml_get errors, try putting
-				  let g:netrw_use_noswf= 0
-				in your .vimrc.
-
-  *g:netrw_winsize*		specify initial size of new windows made with
-				"o" (see |netrw-o|), "v" (see |netrw-v|),
-				|:Hexplore| or |:Vexplore|.
-				 default: ""
-
-  *g:NetrwTopLvlMenu*		This variable specifies the top level
-				menu name; by default, it's "Netrw.".  If
-				you wish to change this, do so in your
-				.vimrc.
-
-NETRW BROWSING AND OPTION INCOMPATIBILITIES	*netrw-incompatible* {{{2
-
-Netrw has been designed to handle user options by saving them, setting the
-options to something that's compatible with netrw's needs, and then restoring
-them.  However, the autochdir option: >
-	:set acd
-is problematical.  Autochdir sets the current directory to that containing the
-file you edit; this apparently also applies to directories.  In other words,
-autochdir sets the current directory to that containing the "file" (even if
-that "file" is itself a directory).
-
-NETRW SETTINGS						*netrw-settings* {{{2
-
-With the NetrwSettings.vim plugin, >
-	:NetrwSettings
-will bring up a window with the many variables that netrw uses for its
-settings.  You may change any of their values; when you save the file, the
-settings therein will be used.  One may also press "?" on any of the lines for
-help on what each of the variables do.
-
-(also see: |netrw-browser-var| |netrw-protocol| |netrw-var| |netrw-variables|)
-
-
-==============================================================================
-OBTAINING A FILE					*netrw-O* {{{2
-
-If there are no marked files:
-
-    When browsing a remote directory, one may obtain a file under the cursor
-    (ie.  get a copy on your local machine, but not edit it) by pressing the O
-    key.
-
-If there are marked files:
-
-    The marked files will be obtained (ie. a copy will be transferred to your
-    local machine, but not set up for editing).
-
-Only ftp and scp are supported for this operation (but since these two are
-available for browsing, that shouldn't be a problem).  The status bar will
-then show, on its right hand side, a message like "Obtaining filename".  The
-statusline will be restored after the transfer is complete.
-
-Netrw can also "obtain" a file using the local browser.  Netrw's display
-of a directory is not necessarily the same as Vim's "current directory",
-unless |g:netrw_keepdir| is set to 0 in the user's <.vimrc>.  One may select
-a file using the local browser (by putting the cursor on it) and pressing
-"O" will then "obtain" the file; ie. copy it to Vim's current directory.
-
-Related topics:
- * To see what the current directory is, use |:pwd|
- * To make the currently browsed directory the current directory, see |netrw-c|
- * To automatically make the currently browsed directory the current
-   directory, see |g:netrw_keepdir|.
-
-
-PREVIEW WINDOW				*netrw-p* *netrw-preview* {{{2
-
-One may use a preview window by using the "p" key when the cursor is atop the
-desired filename to be previewed.  The display will then split to show both
-the browser (where the cursor will remain) and the file (see |:pedit|).
-By default, the split will be taken horizontally; one may use vertical
-splitting if one has set |g:netrw_preview| first.
-
-
-PREVIOUS WINDOW				*netrw-P* *netrw-prvwin* {{{2
-
-To edit a file or directory in the previously used window (see :he |CTRL-W_P|),
-press a "P".  If there's only one window, then the one window will be
-horizontally split (above/below splitting is controlled by |g:netrw_alto|,
-and its initial size is controlled by |g:netrw_winsize|).
-
-If there's more than one window, the previous window will be re-used on
-the selected file/directory.  If the previous window's associated buffer
-has been modified, and there's only one window with that buffer, then
-the user will be asked if s/he wishes to save the buffer first (yes,
-no, or cancel).
-
-
-REFRESHING THE LISTING			*netrw-ctrl-l* *netrw-ctrl_l* {{{2
-
-To refresh either a local or remote directory listing, press ctrl-l (<c-l>) or
-hit the <cr> when atop the ./ directory entry in the listing.  One may also
-refresh a local directory by using ":e .".
-
-
-RENAMING FILES OR DIRECTORIES	*netrw-move* *netrw-rename* *netrw-R* {{{2
-
-If there are no marked files: (see |netrw-mf|)
-
-    Renaming/moving files and directories involves moving the cursor to the
-    file/directory to be moved (renamed) and pressing "R".  You will then be
-    queried for where you want the file/directory to be moved.  You may select
-    a range of lines with the "V" command (visual selection), and then
-    pressing "R".
-
-If there are marked files:  (see |netrw-mf|)
-
-    Marked files will be renamed (moved).  You will be queried as above in
-    order to specify where you want the file/directory to be moved.
-
-The g:netrw_rename_cmd variable is used to implement renaming.  By default its
-value is:
-
-	ssh HOSTNAME mv
-
-One may rename a block of files and directories by selecting them with
-the V (|linewise-visual|).
-
-
-REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
-
-One may toggle between normal and reverse sorting order by pressing the
-"r" key.
-
-Related topics:              |g:netrw-s|
-Associated setting variable: |g:netrw_sort_direction|
-
-
-SELECTING SORTING STYLE			*netrw-s* *netrw-sort* {{{2
-
-One may select the sorting style by name, time, or (file) size.  The "s" map
-allows one to circulate amongst the three choices; the directory listing will
-automatically be refreshed to reflect the selected style.
-
-Related topics:               |g:netrw-r| |g:netrw-S|
-Associated setting variables: |g:netrw_sort_by| |g:netrw_sort_sequence|
-
-
-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 95, and my ftp dumps four blank lines at the
-	    end of every read.
-
-		See |netrw-fixup|, and put the following into your
-		<.vimrc> file:
-
-			let g:netrw_win95ftp= 1
-
-								*netrw-p2*
-	P2. I use Windows, and my network browsing with ftp doesn't sort by
-	    time or size!  -or-  The remote system is a Windows server; why
-	    don't I get sorts by time or size?
-
-		Windows' ftp has a minimal support for ls (ie. it doesn't
-		accept sorting options).  It doesn't support the -F which
-		gives an explanatory character (ABC/ for "ABC is a directory").
-		Netrw then uses "dir" to get both its short and long listings.
-		If you think your ftp does support a full-up ls, put the
-		following into your <.vimrc>: >
-
-			let g:netrw_ftp_list_cmd    = "ls -lF"
-			let g:netrw_ftp_timelist_cmd= "ls -tlF"
-			let g:netrw_ftp_sizelist_cmd= "ls -slF"
-<
-		Alternatively, if you have cygwin on your Windows box, put
-		into your <.vimrc>: >
-
-			let g:netrw_cygwin= 1
-<
-		This problem also occurs when the remote system is Windows.
-		In this situation, the various g:netrw_ftp_[time|size]list_cmds
-		are as shown above, but the remote system will not correctly
-		modify its listing behavior.
-
-
-								*netrw-p3*
-	P3. I tried rcp://user@host/ (or protocol other than ftp) and netrw
-	    used ssh!  That wasn't what I asked for...
-
-		Netrw has two methods for browsing remote directories: ssh
-		and ftp.  Unless you specify ftp specifically, ssh is used.
-		When it comes time to do download a file (not just a directory
-		listing), netrw will use the given protocol to do so.
-
-								*netrw-p4*
-	P4. I would like long listings to be the default.
-
-		Put the following statement into your |.vimrc|: >
-
-			let g:netrw_liststyle= 1
-<
-		Check out |netrw-browser-var| for more customizations that
-		you can set.
-
-								*netrw-p5*
-	P5. My times come up oddly in local browsing
-
-		Does your system's strftime() accept the "%c" to yield dates
-		such as "Sun Apr 27 11:49:23 1997"?  If not, do a "man strftime"
-		and find out what option should be used.  Then put it into
-		your |.vimrc|: >
-
-			let g:netrw_timefmt= "%X"  (where X is the option)
-<
-								*netrw-p6*
-	P6. I want my current directory to track my browsing.
-	    How do I do that?
-
-	    Put the following line in your |.vimrc|:
->
-		let g:netrw_keepdir= 0
-<	
-								*netrw-p7*
-	P7. I use Chinese (or other non-ascii) characters in my filenames, and
-	    netrw (Explore, Sexplore, Hexplore, etc) doesn't display them!
-
-		(taken from an answer provided by Wu Yongwei on the vim
-		mailing list)
-		I now see the problem. You code page is not 936, right? Vim
-		seems only able to open files with names that are valid in the
-		current code page, as are many other applications that do not
-		use the Unicode version of Windows APIs. This is an OS-related
-		issue. You should not have such problems when the system
-		locale uses UTF-8, such as modern Linux distros.
-
-		(...it is one more reason to recommend that people use utf-8!)
-
-								*netrw-p8*
-	P8. I'm getting "ssh is not executable on your system" -- what do I
-	    do?
-
-		(Dudley Fox) Most people I know use putty for windows ssh.  It
-		is a free ssh/telnet application. You can read more about it
-		here:
-
-		http://www.chiark.greenend.org.uk/~sgtatham/putty/ Also:
-
-		(Marlin Unruh) This program also works for me. It's a single
-		executable, so he/she can copy it into the Windows\System32
-		folder and create a shortcut to it. 
-
-		(Dudley Fox) You might also wish to consider plink, as it
-		sounds most similar to what you are looking for. plink is an
-		application in the putty suite.
-
-           http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html#plink
-
-	   	(Vissale Neang) Maybe you can try OpenSSH for windows, which
-		can be obtained from:
-
-		http://sshwindows.sourceforge.net/
-
-		It doesn't need the full Cygwin package. 
-
-		(Antoine Mechelynck) For individual Unix-like programs needed
-		for work in a native-Windows environment, I recommend getting
-		them from the GnuWin32 project on sourceforge if it has them:
-
-		    http://gnuwin32.sourceforge.net/
-
-		Unlike Cygwin, which sets up a Unix-like virtual machine on
-		top of Windows, GnuWin32 is a rewrite of Unix utilities with
-		Windows system calls, and its programs works quite well in the
-		cmd.exe "Dos box". 
-
-		(dave) Download WinSCP and use that to connect to the server.
-		In Preferences > Editors, set gvim as your editor:
-
-			- Click "Add..."
-			- Set External Editor (adjust path as needed, include
-			  the quotes and !.! at the end):
-			    "c:\Program Files\Vim\vim70\gvim.exe" !.!
-			- Check that the filetype in the box below is
-			  {asterisk}.{asterisk} (all files), or whatever types
-			  you want (cec: change {asterisk} to * ; I had to
-			  write it that way because otherwise the helptags
-			  system thinks it's a tag)
-			- Make sure it's at the top of the listbox (click it,
-			  then click "Up" if it's not)
-		If using the Norton Commander style, you just have to hit <F4>
-		to edit a file in a local copy of gvim.
-
-		(Vit Gottwald) How to generate public/private key and save
-		public key it on server: >
-  http://www.tartarus.org/~simon/puttydoc/Chapter8.html#pubkey-gettingready
-			8.3 Getting ready for public key authentication
-<
-		How to use a private key with 'pscp': >
-
-			http://www.tartarus.org/~simon/puttydoc/Chapter5.html
-			5.2.4 Using public key authentication with PSCP 
-<
-		(Ben Schmidt) I find the ssh included with cwRsync is
-		brilliant, and install cwRsync or cwRsyncServer on most
-		Windows systems I come across these days. I guess COPSSH,
-		packed by the same person, is probably even better for use as
-		just ssh on Windows, and probably includes sftp, etc. which I
-		suspect the cwRsync doesn't, though it might
-
-		(cec) To make proper use of these suggestions above, you will
-		need to modify the following user-settable variables in your
-		.vimrc:
-
-		|g:netrw_ssh_cmd| |g:netrw_list_cmd|  |g:netrw_mkdir_cmd|
-		|g:netrw_rm_cmd|  |g:netrw_rmdir_cmd| |g:netrw_rmf_cmd|
-
-		The first one (|g:netrw_ssh_cmd|) is the most important; most
-		of the others will use the string in g:netrw_ssh_cmd by
-		default.
-						*netrw-p9* *netrw-ml_get*
-	P9. I'm browsing, changing directory, and bang!  ml_get errors
-	    appear and I have to kill vim.  Any way around this?
-
-		Normally netrw attempts to avoid writing swapfiles for
-		its temporary directory buffers.  However, on some systems
-		this attempt appears to be causing ml_get errors to
-		appear.  Please try setting |g:netrw_use_noswf| to 0
-		in your <.vimrc>: >
-			let g:netrw_use_noswf= 0
-<
-								*netrw-p10*
-	P10. I'm being pestered with "[something] is a directory" and
-	     "Press ENTER or type command to continue" prompts...
-
-		The "[something] is a directory" prompt is issued by Vim,
-		not by netrw, and there appears to be no way to work around
-		it.  Coupled with the default cmdheight of 1, this message
-		causes the "Press ENTER..." prompt.  So:  read |hit-enter|;
-		I also suggest that you set your |'cmdheight'| to 2 (or more) in
-		your <.vimrc> file.
-
-								*netrw-p11*
-	P11. I want to have two windows; a thin one on the left and my editing
-	     window on the right.  How can I do this?
-
-		* Put the following line in your <.vimrc>:
-			let g:netrw_altv = 1
-		* Edit the current directory:  :e .
-		* Select some file, press v
-		* Resize the windows as you wish (see |ctrl-w_<| and
-		  |ctrl-w_>|).  If you're using gvim, you can drag
-		  the separating bar with your mouse.
-		* When you want a new file, use  ctrl-w h  to go back to the
-		  netrw browser, select a file, then press P  (see |ctrl-w_h|
-		  and |netrw-P|).  If you're using gvim, you can press
-		  <leftmouse> in the browser window and then press the
-		  <middlemouse> to select the file.
-
-==============================================================================
-11. Debugging Netrw Itself				*netrw-debug* {{{1
-
-The <netrw.vim> script is typically available as:
->
-	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
-	/usr/local/share/vim/vim6x/autoload/netrw.vim
-< -or- >
-	/usr/local/share/vim/vim7x/plugin/netrwPlugin.vim
-	/usr/local/share/vim/vim7x/autoload/netrw.vim
-<
-which is loaded automatically at startup (assuming :set nocp).
-
-	1. Get the <Decho.vim> script, available as:
-
-	     http://mysite.verizon.net/astronaut/vim/index.html#DECHO
-	   or
-	     http://vim.sourceforge.net/scripts/script.php?script_id=120
-
-	  It now comes as a "vimball"; if you're using vim 7.0 or earlier,
-	  you'll need to update vimball, too.  See
-	     http://mysite.verizon.net/astronaut/vim/index.html#VIMBALL
-
-	2. 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.
-
-	   To save the file, use >
-		:wincmd j
-		:set bt=
-		:w! DBG
-<	   Please send that information to <netrw.vim>'s maintainer, >
-		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
-<
-==============================================================================
-12. History						*netrw-history* {{{1
-
-	v123: Feb 27, 2008 * Marked files now keeps a "global" marked file
-			     list.  The global marked file list is used to
-			     support tag processing and vimdiff'ing
-			     (|netrw-md| |netrw-mt|)
-			   * Been insuring that mm and mc works with various
-			     combinations of local and remote directories
-			   * (Stefan Bittner) http://.../ should always have
-			     filetype "html" -- fixed.
-			   * (Stefan Bittner) a "?" in a http://.../ request
-			     wasn't being handled correctly.  Fixed by
-			     removing ? from default |g:netrw_tmpfile_escape|.
-			   * (Nico Weber) % codes in http://.../ requests
-			     weren't being handled correctly.  Fixed by
-			     including % in default |g:netrw_fname_escape|.
-			   * (Stefan Bittner) attempts to update Buffers.Refresh
-			     were failing because locale use changed the menu
-			     names.  I implemented a workaround.
-	v122: Feb 12, 2008 * bugfix - first sorting sequence match now has
-			     priority
-	      Feb 14, 2008 * bugfix - sorting sequence was effectively ignoring
-			     sequencing priority of anything following '*'
-			   * toggling a marked file was showing incorrect list
-			     (list was correct, but displayed matches weren't)
-			   * |g:netrw_special_syntax| implemented
-	v121: Feb 11, 2008 * Bram M reported that :e file ... :e . would not
-			     retain the alternate file.  Fixed -- I hope!
-			   * bugfix -- apparently v120 broke an explicit
-			     :Explore dirname
-	v120: Jan 21, 2008 * |netrw-mt| changed to allow for target selection
-	                     based on whether or not word under cursor is a
-			     directory or file, or if cursor is in banner
-			     area.
-			   * |netrw-mh| included (hiding by marked-file suffix)
-			   * functions moved about a bit (improved
-			     categorization)
-			   * executable files now displayed with trailing (*)
-			   * symbolically linked files now displayed with
-			     trailing (@)
-			   * Somewhen, s:NetrwMarkFileMove() got damaged.  Its
-			     now restored (missing an endif, for example).
-			   * |netrw-mu| implemented (unmarking marked files)
-			   * many bugs have been removed from the marked file
-			     system (tnx to Mark S. for feedback)
-			   * |netrw-ms| implemented (sourcing marked files)
-			   * fixed use of P with tree listing style
-			   * multiple tree listing now supported
-			   * ./ suppressed
-			   * changed q -> qb (query bookmarks)
-			   * implemented |netrw-qf|
-			   * Explore now has four special list-generation
-			     modes: */filepat **/filepat
-			           *//pattern **//pattern
-			   * gh (|netrw-gh|) is a shortcut for toggling the
-			     hiding of files and directories beginning with a
-			     dot
-	v119: Jan 10, 2008 * When g:netrw_keepdir is false,
-			     NetrwOptionsRestore() had a problem
-			     (Bill McCarthy)
-	      Jan 11, 2008 * Netrw now shows symbolic links with a trailing
-	                     "@" and special highlighting.
-	      Jan 15, 2008 * Changed g:netrw_noretmap -> |g:netrw_retmap|.
-	                     Changed: disabled by default at Bram's
-			     preference.
-	v118: Jan 02, 2008 * Fixed a problem with Windows;
-			     :Explore c:/path/ would not work,
-			     but :Explore c:/path would.
-			   * Fixed a bug in s:NetrwOptionRestore() - lcd's
-			     argument wasn't being properly escaped so it
-			     wouldn't handle spaces in directory names.
-			     (Gary Johnson)
-	v117: Jan 02, 2008 * Fixed a problem with P; had to include
-			     a b:netrw_curdir bypass (Bram Moolenaar)
-	v116: Nov 27, 2007 * netrw#LocalBrowseCheck() has &ft=="netrw"
-			     check to prevent doing a directory listing
-			     (was getting unexpected directory refreshes
-			     in the middle of some function calls)
-			   * NetrwOptionRestore moved after e! filename
-			     in order to retain user options for editing
-			     in s:NetrwBrowseChgDir()
-	      Dec 12, 2007 * Bug fix -- netrw does a better job of retaining
-	                     user options when editing files under the aegis
-			     of the browser
-	v115: Oct 04, 2007 * Erik Remmelzwaal pointed out that the use of
-			     shellslash in s:GetTempfile() was incorrect
-	      Oct 11, 2007 * Tracked down and eliminated a bug with editing
-			     remote *.tar.gz and *.tar.bz2 files
-	      Oct 11, 2007 * g:netrw_localmovecmd wasn't being initialized
-			     properly, and g:netrw_localcopycmd was being
-			     overwritten.
-	      Oct 12, 2007 * Placed all :Rexplore and <2-leftmouse> setup
-			     in a new support function (s:SetRexDir()).
-	      Oct 15, 2007 * new: g:netrw_browse_split == 4; means <cr>
-			     based selection will use previous window
-	      Oct 20, 2007 * also checks on |'shellxquote'| to set g:netrw_shq
-	      Oct 24, 2007 * Explore handles path/**/filename
-	      Oct 27, 2007 * sourcing remote files often didn't work with ftp,
-	                     turns out that b:netrw_method was undefined, so
-			     s:SaveBufVars and s:RestoreBufVars() fixed it.
-	v114: Sep 28, 2007 * mT, the map that invokes tags, has been improved
-			     to support use of remote tags files.
-	      Oct 02, 2007 * changed Netrw menu to use more submenus
-	v113: Sep 07, 2007 * worked out why the cursor position wasn't being
-			     saved and restored as intended after doing such
-			     things as deleting and renaming files.
-	      Sep 11, 2007 * Fixed bug which effectively disabled <c-l> and
-			     <c-h> maps
-	      Sep 18, 2007 * there used to be one NetrwOptionRestore() call at
-			     the end of the s:NetrwBrowseChgDir() function;
-			     they're now at the end of every if..elseif..else
-			     block.  The edit-a-file one is not quite at the end
-			     of its block; instead, its just before the edit.
-			     Restores user options, then this new placement
-			     allows ftplugins, autocmds, etc to change settings
-			     (ex. ftplugin/cpp.vim sets cindent).
-	      Sep 19, 2007 * changed all strlen() calls to use s:Strlen(), a
-			     function which handles utf-8 wide characters
-			     correctly.
-	      Sep 20, 2007 * (Nico Weber) the "x" command has been extended
-			     to Mac's OS/X (macunix); it now uses open to
-			     handle |netrw-x| browsing with special files.
-	      Sep 22, 2007 * Added |g:netrw_noretmap| to netrw at Tony M's
-			     request.
-			   * Included path to NetrwRemoteRmFile()
-	v112: Aug 18, 2007 * added mx (|netrw-mx|) for executing arbitrary
-			     commands on marked files
-	      Aug 22, 2007 * more option save/restore work for
-			     s:NetrwBrowseChgDir(); s:NetrwOptionSave()
-			     and s:NetrwOptionRestore() now take a parameter
-			     specifying the type of variables to be used for
-			     saving and restoring (either "w:" or "s:")
-	      Sep 04, 2007 * added the :NetrwClean[!] command
-	v111: Jul 25, 2007 * using Windows but not using Cygwin, netrw does a
-			     "file bufname" where the bufname uses /s
-			     instead of \s; Vim "fixes" it by changing the
-			     bufname to use \s anyway.  This meant that
-			     NetrwGetBuffer() didn't find the appropriately
-			     named buffer, and so would generate a new
-			     buffer listing; hence the cursor would appear
-			     to have been moved when doing a preview.
-			   * added <2-leftmouse> map to return to netrw's
-			     browser display
-	      Aug 16, 2007 * added the mark-file system, including
-			     maps for mf mp mt mz and mu.  Modifications
-			     made to maps for a D O and R to support
-			     marked files.
-	v110: May 10, 2007 * added [ and ] maps to NetrwTreeListing
-	      May 25, 2007 * |g:netrw_preview| included
-	      May 29, 2007 * modifed netrw#NetBrowseX to consistently use
-			    |g:netrw_shq| instead of hardcoded quotes,
-			     and modified the snippet that sets up redir
-			     so Windows machines use "nul" instead of
-			     "/dev/null".
-	      Jun 01, 2007 * fixed bug -- NetGetBuffer() wasn't always
-			     recognizing a buffer name match when it should,
-			     thus resulting in [Scratch] buffers.
-	      Jun 04, 2007 * Gary Johnson found a bugfix for the "c" mapping
-			     when the directory is to be made current but
-			     the name contains spaces.
-	v109: Mar 26, 2007 * if a directory name includes a "$" character,
-			     Explore() will use expand() in an attempt to
-			     decipher the name.
-	      May 07, 2007 * g:netrw_use_errorwindow now allows one to
-			     have error messages go to a reliable window
-			     or to use a less reliable but recallable 
-			     echoerr method
-	      May 07, 2007 * g:netrw_scpport and g:netrw_sshport support
-			     use of -P and -p, respectively, to set port
-			     for scp/ssh.
-	v108: Jan 03, 2007 * included preview map (|netrw-p|), supporting
-			     remote browsing
-			   * netrw can now source remote files
-	      Jan 26, 2007 * Colton Jamieson noted that remote directory
-			     browsing did not support alternate port
-			     selection.  This feature has now been extended
-			     to apply to all remote browsing commands via ssh.
-			     (list, remove/delete, rename)
-	      Jan 31, 2007 * Luis Florit reported that @* was an invalid
-			     register.  The @* register is now only saved and
-			     restored if |'guioptions'| contains "a".
-	      Feb 02, 2007 * Fixed a bug that cropped up when writing files
-			     via scp using cygwin
-	      Feb 08, 2007 * tree listing mode managed to stop working again;
-			     fixed again!
-	      Feb 15, 2007 * Guido Van Hoecke reported that netrw didn't
-			     handle browsing well with M$ ftp servers.  He even
-			     set up a temporary account for me to test with
-			     (thanks!).  Netrw now can browse M$ ftp servers.
-	v107: Oct 12, 2006 * bypassed the autowrite option
-	      Oct 24, 2006 * handles automatic decompression of *.gz and *.bz2
-			     files
-	      Nov 03, 2006 * Explore will highlight matching files when
-			     **/pattern is used (and if the |'hls'| option
-			     is set)
-	      Nov 09, 2006 * a debugging line, when enabled, was inadvertently
-			     bringing up help instead of simply reporting on
-			     list contents
-	      Nov 21, 2006 * tree listing improved (cursor remains put)
-	      Nov 27, 2006 * fixed b:netrw_curdir bug when repeated "i"s were
-			     pressed.
-	      Dec 15, 2006 * considerable qty of changes, mostly to share more
-			     code between local and remote browsing.  Includes
-			     support for tree-style listing for both remote
-			     and local browsing.
-	      Dec 15, 2006 * Included Peter Bengtsson's modifications to
-			     support the Amiga.
-	v106: Sep 21, 2006 * removed old v:version<700 code as netrw now
-			     requires vim 7.0
-			   * worked around a bug where register * was
-			     overwritten during local browsing
-	v104: Sep 05, 2006 * as suggested by Rodolfo Borges, :Explore and
-			     variants will position the cursor on the file
-			     just having been edited
-			   * changed default |g:netrw_sort_sequence| order
-			   * changed b, Nb to simply mb  (see |netrw-mb|)
-			   * changed B, NB to simply gb  (see |netrw-gb|)
-			   * tree listing style (see |g:netrw_liststyle|)
-			   * attempts to retain the alternate file
-	v103: Jul 26, 2006 * used Yakov Lerner's tip#1289 to improve netrw
-			     error message display
-			   * wide listings didn't handle files with backslashes
-			     in their names properly.  A symptom was an
-			     inability to open files.
-	      Aug 09, 2006 * included "t" mapping for opening tabbed windows,
-			    both for remote and local browsing
-			   * changed netrw_longlist to netrw_liststyle
-	      Aug 15, 2006 * fixed one of the NB maps
-	      Aug 22, 2006 * changed *Explore commands to use -nargs=* instead
-			     of -nargs=?.  Allows both -complete=dir _and_ the
-			     starstar arguments to work (-nargs=? seems to
-			     require one or the other).
-	      Aug 23, 2006 * copied all w:.. variables across splits to
-			     new windows
-	      Aug 25, 2006 * when g:netrw_browsex_viewer was '-'
-			     (see |g:netrw_browsex_viewer|) it wasn't causing
-			     netrwFileHandlers#Invoke() to be called as it
-			     was expected to.  (tnx Steve Dugaro)
-	      Aug 29, 2006 * changed NetBrowseX() to use "setlocal ... noswf"
-			     instead of "set ... noswf"  (tnx Benji Fisher)
-	      Aug 31, 2006 * tabs and fastbrowse<=1 didn't work together.
-	v102: Jun 15, 2006 * chgd netrwPlugin to call netrw#LocalBrowseCheck()
-			   * bugfix: g:netrw_keepdir==0 had stopped working
-	      Jul 06, 2006 * bugfix: NetOptionSave/Restore now saves/restores
-			     the unnamed register (|registers|)
-	      Jul 07, 2006 * |g:netrw_menu| support included
-	      Jul 13, 2006 * :Texplore command implemented
-	      Jul 17, 2006 * NetSplit and (Local|Net)BrowseChgDir() were both
-			     splitting windows.  This affected o, v, and
-			     g:netrw_browse_split.
-	      Jul 20, 2006 * works around wildignore setting (was causing
-			     netrw's local browser not to list wildignore'd
-			     files)
-	      Jul 24, 2006 * <leftmouse> acts as a <cr> for selecting a file
-			     <rightmouse> acts as a <del> for deleting a file
-	v100: May 14, 2006 * when using Windows and shell==cmd.exe, the
-			     default for g:netrw_ignorenetrc is now 1
-			   * bugfix: unwanted ^Ms now removed
-			     (affected shell==cmd.exe - Windows)
-			   * added Bookmarks and History to the menu
-			   * an error message about non-existing
-			     w:netrw_longlist was appearing during attempts to
-			     Explore (fixed)
-			   * g:netrw_shq now available to make netrw use
-			     specified style of quotes for commands
-	     May 29, 2006  * user NFH_*() functions were inadvertently being
-			     ignored
-			   * fixed a Windows non-cygwin ftp handling problem.
-			   * hiding pattern candidate separators included some
-			     characters it shouldn't have (tnx to Osei Poku)
-	     Jun 01, 2006  * for browsing, netrw was supposed to use "dir"
-			     instead of "ls -lF" when using
-			     ftp+non-cygwin+windows.  Fixed.
-			   * an inadvertently left-in-place debugging statement
-			     was preventing use of the "x" key with browsing.
-	     Jun 05, 2006  * g:netrw_nogx available to prevent making the gx
-			     map (see |g:netrw_nogx|)
-			   * bugfix, Explore wouldn't change directory
-			     properly (vim ., :Explore subdirname)
-	     Jun 06, 2006  * moved history to 2nd line in Netrw menu
-			   * fixed delete for unix-based systems
-	     Jun 07, 2006  * x key now works for windows-noncygwin-ftp
-	     Jun 08, 2006  * Explore */pat and **//pat now wraps
-	v99: May 09, 2006  * g:netrw_browse_split=3 for opening files in new
-			     tabs implemented.
-	     May 12, 2006  * deletes temporary file at end of NetRead()
-			   * visual mode based Obtain implemented
-			   * added -complete=dir to the various Explore
-			     commands
-	v98: May 02, 2006  * the "p" key didn't work properly when the browsing
-			     directory name had spaces in it.
-	v97: May 01, 2006  * exists("&acd") now used to determine if
-			     the 'acd' option exists
-			   * "obtain" now works again under Windows
-	v96:		   * bugfix - the |'acd'| option is not always defined
-			     but is now bypassed only when it is
-	v95:		   * bugfix - Hiding mode worked correctly (don't show
-			     any file matching any of the g:netrw_hide
-			     patterns), but showing mode was showing only those
-			     files that didn't match any of the g:netrw_hide
-			     patterns.  Instead, it now shows all files that
-			     match any of the g:netrw_hide patterns (the
-			     difference between a logical and and logical or).
-	v94:		   * bugfix - a Decho() had a missing quote; only
-			     affects things when debugging was enabled.
-	v93:		   * bugfix - removed FocusGained event from causing a
-			     slow-browser refresh for Windows
-	v92:		   * :Explore **//pattern implemented
-			      (**/filepattern was already taken)
-	v91:		   * :Explore */pattern implemented
-			   * |'acd'| option bypassed
-	v90:		   * mark ', as suggested by Yegappan Lakshmanan, used
-			     to help guarantee entry into the jump list when
-			     appropriate.
-			   * <s-down> and <s-up> are no longer defined until a
-			     :Explore **/pattern  is used (if the user already
-			     has a map for them).  They will be defined for new
-			     browser windows from that point forward.
-	v89:		   * A <s-down>, <s-up>, :Nexplore, or a :Pexplore
-			     without having first done an :Explore **/pattern
-			     (see |netrw-starstar|) caused
-			     a lot of unhelpful error messages to appear
-	v88:		   * moved DrChip.Netrw menu to Netrw.  Now has
-			     priority 80 by default.
-			     g:NetrwTopLvlMenu == "Netrw" and can be changed
-			     by the user to suit.  The priority is given by
-			     g:NetrwMenuPriority.
-			   * Changed filetype for browser displays from
-			     netrwlist to netrw.
-	v87:		   * bug fix -- menus were partially disappearing
-	v85:		   * bug fix -- missing an endif
-			   * bug fix -- handles spaces in names and directories
-			     when using ftp-based browsing
-	v83:		   * disabled stop-acd handling; the change in directory
-			     handling may allow acd to be used again.
-			   * D was refusing to delete remote files/directories
-			     in wide listing mode.
-	v81:		   * FocusGained also used to refresh/wipe local browser
-			     directory buffers
-			   * (bugfix) netrw was leaving [Scratch] buffers behind
-			     when the user had the "hidden" option set.  The
-			     'hidden' option is now bypassed.
-	v80:		   * ShellCmdPost event used in conjunction with
-			     g:netrw_fastbrowse to refresh/wipe local browser
-			     directory buffers.
-	v79:		   * directories are now displayed with nowrap
-			   * (bugfix) if the column width was smaller than the
-			     largest file's name, then netrw would hang when
-			     using wide-listing mode - fixed
-			   * g:netrw_fastbrowse introduced
-	v78:		   * progress has been made on allowing spaces inside
-			     directory names for remote work (reading, writing,
-			     browsing).  (scp)
-	v77:		   * Mikolaj Machowski fixed a bug in a substitute cmd
-			   * g:netrw_browsex_viewer implemented
-			   * Mikolaj Machowski pointed out that gnome-open is
-			     often executable under KDE systems, although it is
-			     effectively not functional.  NetBrowseX now looks
-			     for "kicker" as a running process to determine if
-			     KDE is actually running.
-			   * Explorer's O functionality was inadvertently left
-			     out.  Netrw now does the same thing, but with the
-			     "P" key.
-			   * added g:netrw_browse_split option
-			   * fixed a bug where the directory contained a "." but
-			     the file didn't (was treating the dirname from "."
-			     onwards as a suffix)
-	v76:		   * "directory is missing" error message now restores
-			      echo highlighting
-	v75:		   * file://... now conforms to RFC2396 (thanks to
-			     S. Zacchiroli)
-			   * if the binary option is set, then NetWrite() will
-			     only write the whole file (line numbers don't make
-			     sense with this).  Supports writing of tar and zip
-			     files.
-	v74:		   * bugfix (vim, then :Explore) now works
-			   * ctrl-L keeps cursor at same screen location (both
-			     local and remote browsing)
-			   * netrw now can read remote zip and tar files
-			   * Obtain now uses WinXP ftp+.netrc successfully
-	v73:		   * bugfix -- scp://host/path/file was getting named
-			     incorrectly
-			   * netrw detects use of earlier-than-7.0 version of
-			     vim and issues a pertinent error message.
-			   * netrwSettings.vim is now uses autoloading.  Only
-			     <netrwPlugin.vim> is needed as a pure plugin
-			     (ie. always loaded).
-	v72:		   * bugfix -- formerly, one could prevent the loading
-			     of netrw by "let g:loaded_netrw=1"; when
-			     autoloading became supported, this feature was
-			     lost.  It is now restored.
-	v71:		   * bugfix -- made some "set nomodifiable"s into
-			     setlocal variants (allows :e somenewfile  to be
-			     modifiable as usual)
-			   * NetrwSettings calls a netrw function, thereby
-			     assuring that netrw has loaded.  However, if netrw
-			     does not load for whatever reason, then
-			     NetrwSettings will now issue a warning message.
-			   * For what reason I don't recall, when wget and fetch
-			     are both not present, and an attempt to read a
-			     http://... url is made, netrw exited.  It now only
-			     returns.
-			   * When ch=1, on the second and subsequent uses of
-			     browsing Netrw would issue a blank line to clear
-			     the echo'd messages.  This caused an annoying
-			     "Hit-Enter" prompt; now a blank line message
-			     is echo'd only if &ch>1.
-	v70:		   * when using |netrw-O|, the "Obtaining filename"
-			     message is now shown using |hl-User9|.  If User9
-			     has not been defined, netrw itself will define it.
-	v69:		   * Bugfix: win95/98 machines were experiencing a
-			     "E121: Undefined variable: g:netrw_win95ftp"
-			     message
-	v68:		   * double-click-leftmouse selects word under mouse
-	v67:		   * Passwords which contain blanks will now be
-			     surrounded by double-quotes automatically (Yongwei)
-	v66:		   * Netrw now seems to work with a few more Windows
-			     situations
-			   * O now obtains a file: remote browsing
-			     file -> local copy, locally browsing
-			     file -> current directory (see :pwd)
-			   * i now cycles between thin, long, and wide listing
-			     styles
-			   * NB and Nb are maps that are always available;
-			     corresponding B and b maps are only available when
-			     not using wide listing in order to allow them to
-			     be used for motions
-	v65:		   * Browser functions now use NetOptionSave/Restore; in
-			     particular, netrw now works around the report
-			     setting
-	v64:		   * Bugfix - browsing a "/" directory (Unix) yielded
-			     buffers named "[Scratch]" instead of "/"
-			   * Bugfix - remote browsing with ftp was omitting
-			     the ./ and ../
-	v63:		   * netrw now takes advantage of autoload (needs 7.0)
-			   * Bugfix - using r (to reverse sort) working again
-	v62:		   * Bugfix - spaces allowed again in directory names
-			     with g:netrw_keepdir=0.  In fact, I've tested netrw
-			     with most ANSI punctuation marks for directory
-			     names.
-			   * Bugfix - NetrwSettings gave errors when
-			     g:netrw_silent had not be set.
-	v61:		   * Document upgrade -- netrw variable-based settings
-			     all should have tags.  Supports NetrwSettings cmd.
-			   * Several important variables are window-oriented.
-			     Netrw has to transfer these across a window split.
-			     See s:BufWinVars() and s:UseBufWinVars().
-	v60:		   * When using the i map to switch between long and
-			     short listings, netrw will now keep cursor on same
-			     line
-			   * "Match # of #" now uses status line
-			   * :Explore **/*.c  will now work from a
-			     non-netrw-browser window
-			   * :Explore **/patterns can now be run in separate
-			     browser windows
-			   * active banner (hit <cr> will cause various things
-			     to happen)
-	v59:		   * bugfix -- another keepalt work-around installed
-			     (for vim6.3)
-			   * "Match # of #" for Explore **/pattern matches
-	v58:		   * Explore and relatives can now handle
-			     **/somefilepattern (v7)
-			   * Nexplore and Pexplore introduced (v7).  shift-down
-			     and shift-up cursor keys will invoke Nexplore and
-			     Pexplore, respectively.
-			   * bug fixed with o and v
-			   * autochdir only worked around for vim when it has
-			     been compiled with either
-			     |+netbeans_intg| or |+sun_workshop|
-			   * Under Windows, all directories and files were
-			     being preceded with a "/" when local browsing.
-			     Fixed.
-			   * When: syntax highlighting is off, laststatus=2, and
-			     remote browsing is used, sometimes the laststatus
-			     highlighting bleeds into the entire display.  Work
-			     around - do an extra redraw in that case.
-			   * Bugfix: when g:netrw_keepdir=0, due to re-use of
-			     buffers, netrw didn't change the directory when it
-			     should've
-			   * Bugfix: D and R commands work again
-	v57:		   * Explore and relatives can now handle RO files
-			   * reverse sort restored with vim7's sort command
-			   * g:netrw_keepdir now being used to keep the current
-			     directory unchanged as intended (sense change)
-			   * vim 6.3 still supported
-	v56:		   * LocalBrowse now saves autochdir setting, unsets it,
-			     and restores it before returning.
-			   * using vim's rename() instead of system +
-			     local_rename variable
-			   * avoids changing directory when g:netrw_keepdir is
-			     false
-	v55:		   * -bar used with :Explore :Sexplore etc to allow
-			     multiple commands to be separated by |s
-			   * browser listings now use the "nowrap" option
-			   * browser: some unuseful error messages now
-			     suppressed
-	v54:		   * For backwards compatibility, Explore and Sexplore
-			     have been implemented.  In addition, Hexplore and
-			     Vexplore commands are available, too.
-			   * <amatch> used instead of <afile> in the
-			     transparency support (BufReadCmd, FileReadCmd,
-			     FileWriteCmd)
-			   * ***netrw*** prepended to various error messages
-			     netrw may emit
-			   * g:netrw_port used instead of b:netrw_port for scp
-			   * any leading [:#] is removed from port numbers
-	v53:		   * backslashes as well as slashes placed in various
-			     patterns (ex. g:netrw_sort_sequence) to better
-			     support Windows
-	v52:		   * nonumber'ing now set for browsing buffers
-			   * when the hiding list hid all files, error messages
-			     ensued. Fixed
-			   * when browsing, swf is set, but directory is not
-			     set, when netrw was attempting to restore options,
-			     vim wanted to save a swapfile to a local directory
-			     using an url-style path.  Fixed
-	v51:		   * cygwin detection now automated
-			     (using windows and &shell is bash)
-			   * customizable browser "file" rejection patterns
-			   * directory history
-			   * :[range]w url  now supported (ie. netrw uses a
-			     FileWriteCmd event)
-			   * error messages have a "Press <cr> to continue" to
-			     allow them to be seen
-			   * directory browser displays no longer bother the
-			     swapfile
-			   * u/U commands to go up and down the history stack
-			   * history stack may be saved with viminfo with it's
-			     "!" option
-			   * bugfixes associated with unwanted [No Files]
-			     entries
-	v50:		   * directories now displayed using buftype=nofile;
-			     should keep the directory names as-is
-			   * attempts to remove empty "[No File]" buffers
-			     leftover from :file ..name.. commands
-			   * bugfix: a "caps-lock" editing difficulty left in
-			     v49 was fixed
-			   * syntax highlighting for "Showing:" the hiding list
-			     included
-			   * bookmarks can now be retained if "!" is in the
-			     viminfo option
-	v49:		   * will use ftp for http://.../ browsing
-	v48:		   * One may use ftp to do remote host file browsing
-			   * (windows and !cygwin) remote browsing with ftp can
-			     now use the "dir" command internally to provide
-			     listings
-			   * g:netrw_keepdir now allows one to keep the initial
-			     current directory as the current directory
-			     (normally the local file browser makes the
-			     currently viewed directory the current directory)
-			   * g:netrw_alto and g:netrw_altv now support
-			     alternate placement of windows started with o or v
-			   * Nread ? and Nwrite ?  now uses echomsg (instead of
-			     echo) so :messages can repeat showing the help
-			   * bugfix: avoids problems with partial matches of
-			     directory names to prior buffers with longer names
-			   * one can suppress error messages with g:netrw_quiet
-			     ctrl-h used
-			   * instead of <Leader>h for editing hiding list one
-			     may edit the sorting sequence with the S map, which
-			     now allows confirmation of deletion with
-			     [y(es) n(o) a(ll) q(uit)]
-			   * the "x" map now handles special file viewing with:
-			     (windows) rundll32 url.dll (gnome) gnome-open (kde)
-			     kfmclient If none of these are on the executable
-			     path, then netrwFileHandlers.vim is used.
-			   * directory bookmarking during both local and remote
-			     browsing implemented
-			   * one may view all, use the hiding list to suppress,
-			     or use the hiding list to show-only remote and
-			     local file/directory listings
-			   * improved unusual file and directory name handling
-			     preview window support
-	v47:		   * now handles local browsing.
-	v46:		   * now handles remote browsing
-			   * g:netrw_silent (if 1) will cause all transfers to
-			     be silent
-	v45:		   * made the [user@]hostname:path form a bit more
-			     restrictive to better handle errors in using
-			     protocols (e.g. scp:usr@host:file was being
-			     recognized as an rcp request)
-	v44:		   * changed from "rsync -a" to just "rsync"
-			   * somehow an editing error messed up the test to
-			     recognize use of the fetch method for NetRead.
-			   * more debugging statements included
-	v43:		   * moved "Explanation" comments to <pi_netrw.txt> help
-			     file as "Network Reference" (|netrw-ref|)
-			   * <netrw.vim> now uses Dfunc() Decho() and Dret() for
-			     debugging
-			   * removed superfluous NetRestorePosn() calls
-	v42:		   * now does BufReadPre and BufReadPost events on
-			     file:///* and file://localhost/*
-	v41:		   * installed file:///* and file://localhost/* handling
-	v40:		   * prevents redraw when a protocol error occurs so
-			     that the user may see it
-	v39:		   * sftp support
-	v38:		   * Now uses NetRestorePosn() calls with Nread/Nwrite
-			     commands
-			   * Temporary files now removed via bwipe! instead of
-			     bwipe (thanks to Dave Roberts)
-	v37:		   * Claar's modifications which test if ftp is
-			     successful, otherwise give an error message
-			   * After a read, the alternate file was pointing to
-			     the temp file.  The temp file buffer is now wiped
-			     out.
-			   * removed silent from transfer methods so user can
-			     see what's happening
-
-
-==============================================================================
-12. Credits						*netrw-credits* {{{1
-
-	Vim editor	by Bram Moolenaar (Thanks, Bram!)
-	dav		support by C Campbell
-	fetch		support by Bram Moolenaar and C Campbell
-	ftp		support by C Campbell <NdrOchip@ScampbellPfamily.AbizM>
-	http		support by Bram Moolenaar <bram@moolenaar.net>
-	rcp
-	rsync		support by C Campbell (suggested by Erik Warendorph)
-	scp		support by raf <raf@comdyn.com.au>
-	sftp		support by C Campbell
-
-	inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
-
-	Jérôme Augé		-- also using new buffer method with ftp+.netrc
-	Bram Moolenaar		-- obviously vim itself, :e and v:cmdarg use,
-	                           fetch,...
-	Yasuhiro Matsumoto	-- pointing out undo+0r problem and a solution
-	Erik Warendorph		-- for several suggestions (g:netrw_..._cmd
-				   variables, rsync etc)
-	Doug Claar		-- modifications to test for success with ftp
-	                           operation
-
-==============================================================================
-Modelines: {{{1
- vim:tw=78:ts=8:ft=help:norl:fdm=marker
+*pi_netrw.txt*  For Vim version 7.2.  Last change: 2008 Sep 02
+
+	    -----------------------------------------------------
+	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
+	    -----------------------------------------------------
+
+
+*dav*    *ftp*    *netrw-file*  *Nread*    *rcp*    *scp*
+*davs*   *http*   *netrw.vim*   *Nsource*  *rsync*  *sftp*
+*fetch*  *netrw*  *network*     *Nwrite*
+
+==============================================================================
+1. Contents						*netrw-contents* {{{1
+
+1.  Contents.............................................|netrw-contents|
+2.  Starting With Netrw..................................|netrw-start|
+3.  Netrw Reference......................................|netrw-ref|
+      EXTERNAL APPLICATIONS AND PROTOCOLS................|netrw-externapp|
+      READING............................................|netrw-read|
+      WRITING............................................|netrw-write|
+      DIRECTORY LISTING..................................|netrw-dirlist|
+      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
+      VARIABLES AND SETTINGS.............................|netrw-variables|
+      PATHS..............................................|netrw-path|
+4.  Network-Oriented File Transfer.......................|netrw-xfer|
+      NETRC..............................................|netrw-netrc|
+      PASSWORD...........................................|netrw-passwd|
+5.  Activation...........................................|netrw-activate|
+6.  Transparent File Editing.............................|netrw-transparent|
+7.  Ex Commands..........................................|netrw-ex|
+8.  Variables and Options................................|netrw-var|
+9.  Browsing.............................................|netrw-browse|
+      Introduction To Browsing...........................|netrw-intro-browse|
+      Quick Reference: Maps..............................|netrw-browse-maps|
+      Quick Reference: Commands..........................|netrw-browse-cmds|
+      Bookmarking A Directory............................|netrw-mb|
+      Browsing...........................................|netrw-cr|
+      Browsing With A Horizontally Split Window..........|netrw-o|
+      Browsing With A New Tab............................|netrw-t|
+      Browsing With A Vertically Split Window............|netrw-v|
+      Change Listing Style...............................|netrw-i|
+      Changing To A Bookmarked Directory.................|netrw-gb|
+      Changing To A Predecessor Directory................|netrw-u|
+      Changing To A Successor Directory..................|netrw-U|
+      Customizing Browsing With A User Function..........|netrw-x|
+      Deleting Files Or Directories......................|netrw-D|
+      Directory Exploring Commands.......................|netrw-explore|
+      Exploring With Stars and Patterns..................|netrw-star|
+      Displaying Information About File..................|netrw-qf|
+      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
+      Editing The Sorting Sequence.......................|netrw-S|
+      Going Up...........................................|netrw--|
+      Hiding Files Or Directories........................|netrw-a|
+      Improving Browsing.................................|netrw-ssh-hack|
+      Listing Bookmarks And History......................|netrw-qb|
+      Making A New Directory.............................|netrw-d|
+      Making The Browsing Directory The Current Directory|netrw-c|
+      Marking Files......................................|netrw-mf|
+      Marking Files By Regular Expression................|netrw-mr|
+      Marked Files: Arbitrary Command....................|netrw-mx|
+      Marked Files: Compression And Decompression........|netrw-mz|
+      Marked Files: Copying..............................|netrw-mc|
+      Marked Files: Diff.................................|netrw-md|
+      Marked Files: Editing..............................|netrw-me|
+      Marked Files: Grep.................................|netrw-mg|
+      Marked Files: Hiding and Unhiding by Suffix........|netrw-mh|
+      Marked Files: Moving...............................|netrw-mm|
+      Marked Files: Printing.............................|netrw-mp|
+      Marked Files: Sourcing.............................|netrw-ms|
+      Marked Files: Tagging..............................|netrw-mT|
+      Marked Files: Setting the Target Directory.........|netrw-mt|
+      Marked Files: Unmarking............................|netrw-mu|
+      Netrw Browser Variables............................|netrw-browser-var|
+      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
+      Netrw Settings.....................................|netrw-settings|
+      Obtaining A File...................................|netrw-O|
+      Preview Window.....................................|netrw-p|
+      Previous Window....................................|netrw-P|
+      Refreshing The Listing.............................|netrw-ctrl-l|
+      Renaming Files Or Directories......................|netrw-move|
+      Reversing Sorting Order............................|netrw-r|
+      Selecting Sorting Style............................|netrw-s|
+10. Problems and Fixes...................................|netrw-problems|
+11. Debugging Netrw Itself...............................|netrw-debug|
+12. History..............................................|netrw-history|
+13. Credits..............................................|netrw-credits|
+
+{Vi does not have any of this}
+
+==============================================================================
+2. Starting With Netrw					*netrw-start* {{{1
+
+Netrw makes reading files, writing files, browsing over a network, and
+browsing locally easy!  First, make sure that you have plugins enabled, so
+you'll need to have at least the following in your <.vimrc>:
+(or see |netrw-activate|) >
+
+	set nocp                    " 'compatible' is not set
+	filetype plugin on          " plugins are enabled
+<
+(see |'cp'| and |:filetype-plugin-on|)
+
+Netrw supports "transparent" editing of files on other machines using urls
+(see |netrw-transparent|). As an example of this, let's assume you have an
+account on some other machine; if you can use scp, try: >
+
+	vim scp://hostname/path/to/file
+<
+Want to make ssh/scp easier to use? Check out |netrw-ssh-hack|!
+
+So, what if you have ftp, not ssh/scp?  That's easy, too; try >
+
+	vim ftp://hostname/path/to/file
+<
+Want to make ftp simpler to use?  See if your ftp supports a file called
+<.netrc> -- typically it goes in your home directory, has read/write
+permissions for only the user to read (ie. not group, world, other, etc),
+and has lines resembling >
+
+	machine HOSTNAME login USERID password "PASSWORD"
+	machine HOSTNAME login USERID password "PASSWORD"
+	...
+	default          login USERID password "PASSWORD"
+<
+Now about browsing -- when you just want to look around before editing a
+file.  For browsing on your current host, just "edit" a directory: >
+
+	vim .
+	vim /home/userid/path
+<
+For browsing on a remote host, "edit" a directory (but make sure that
+the directory name is followed by a "/"): >
+
+	vim scp://hostname/
+	vim ftp://hostname/path/to/dir/
+<
+See |netrw-browse| for more!
+
+There are more protocols supported by netrw just than scp and ftp, too: see the
+next section, |netrw-externapp|, for how to use these external applications.
+
+If you want to use plugins, but for some reason don't wish to use netrw, then
+you need to avoid loading both the plugin and the autoload portions of netrw.
+You may do so by placing the following two lines in your <.vimrc>: >
+
+	:let g:loaded_netrw       = 1
+	:let g:loaded_netrwPlugin = 1
+<
+
+==============================================================================
+3. Netrw Reference					*netrw-ref* {{{1
+
+   Netrw supports several protocols in addition to scp and ftp mentioned
+   in |netrw-start|.  These include dav, fetch, http,... well, just look
+   at the list in |netrw-externapp|.  Each protocol is associated with a
+   variable which holds the default command supporting that protocol.
+
+EXTERNAL APPLICATIONS AND PROTOCOLS			*netrw-externapp* {{{2
+
+	Protocol  Variable	    Default Value
+	--------  ----------------  -------------
+	   dav:    *g:netrw_dav_cmd*  = "cadaver"
+	 fetch:  *g:netrw_fetch_cmd*  = "fetch -o"    if fetch is available
+	   ftp:    *g:netrw_ftp_cmd*  = "ftp"
+	  http:   *g:netrw_http_cmd*  = "curl -o"     if     curl  is available
+	  http:    g:netrw_http_cmd   = "wget -q -O"  elseif wget  is available
+          http:    g:netrw_http_cmd   = "fetch -o"    elseif fetch is available
+	   rcp:    *g:netrw_rcp_cmd*  = "rcp"
+	 rsync:  *g:netrw_rsync_cmd*  = "rsync -a"
+	   scp:    *g:netrw_scp_cmd*  = "scp -q"
+	  sftp:   *g:netrw_sftp_cmd*  = "sftp"
+
+READING						*netrw-read* *netrw-nread* {{{2
+
+	Generally, one may just use the url notation with a normal editing
+	command, such as >
+
+		:e ftp://[user@]machine/path
+<
+	Netrw also provides the Nread command:
+
+	:Nread ?					give help
+	:Nread "machine:path"				uses rcp
+	:Nread "machine path"				uses ftp w/ <.netrc>
+	:Nread "machine id password path"		uses ftp
+	:Nread "dav://machine[:port]/path"		uses cadaver
+	:Nread "fetch://[user@]machine/path"		uses fetch
+	:Nread "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
+	:Nread "http://[user@]machine/path"		uses http  uses wget
+	:Nread "rcp://[user@]machine/path"		uses rcp
+	:Nread "rsync://[user@]machine[:port]/path"	uses rsync
+	:Nread "scp://[user@]machine[[:#]port]/path"	uses scp
+	:Nread "sftp://[user@]machine/path"		uses sftp
+
+WRITING					*netrw-write* *netrw-nwrite* {{{2
+
+	One may just use the url notation with a normal file writing
+	command, such as >
+
+		:w ftp://[user@]machine/path
+<
+	Netrw also provides the Nwrite command:
+
+	:Nwrite ?					give help
+	:Nwrite "machine:path"				uses rcp
+	:Nwrite "machine path"				uses ftp w/ <.netrc>
+	:Nwrite "machine id password path"		uses ftp
+	:Nwrite "dav://machine[:port]/path"		uses cadaver
+	:Nwrite "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
+	:Nwrite "rcp://[user@]machine/path"		uses rcp
+	:Nwrite "rsync://[user@]machine[:port]/path"	uses rsync
+	:Nwrite "scp://[user@]machine[[:#]port]/path"	uses scp
+	:Nwrite "sftp://[user@]machine/path"		uses sftp
+	http: not supported!
+
+SOURCING					*netrw-source* {{{2
+
+	One may just use the url notation with the normal file sourcing
+	command, such as >
+
+		:so ftp://[user@]machine/path
+<
+	Netrw also provides the Nsource command:
+
+	:Nsource ?					give help
+	:Nsource "dav://machine[:port]/path"		uses cadaver
+	:Nsource "fetch://[user@]machine/path"		uses fetch
+	:Nsource "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
+	:Nsource "http://[user@]machine/path"		uses http  uses wget
+	:Nsource "rcp://[user@]machine/path"		uses rcp
+	:Nsource "rsync://[user@]machine[:port]/path"	uses rsync
+	:Nsource "scp://[user@]machine[[:#]port]/path"	uses scp
+	:Nsource "sftp://[user@]machine/path"		uses sftp
+
+DIRECTORY LISTING					*netrw-dirlist* {{{2
+
+	One may browse a directory to get a listing by simply attempting to
+	edit the directory: >
+
+		:e scp://[user]@hostname/path/
+		:e ftp://[user]@hostname/path/
+<
+	For remote directories (ie. those using scp or ftp), that trailing
+	"/" is necessary (it tells netrw that its to treat it as a directory
+	to browse instead of a file to download).
+
+	However, the Nread command can also be used to accomplish this:
+
+	:Nread [protocol]://[user]@hostname/path/
+
+					*netrw-login* *netrw-password*
+CHANGING USERID AND PASSWORD		*netrw-chgup* *netrw-userpass* {{{2
+
+	Attempts to use ftp will prompt you for a user-id and a password.
+	These will be saved in global variables g:netrw_uid and
+	s:netrw_passwd; subsequent uses of ftp will re-use those two items to
+	simplify the further use of ftp.  However, if you need to use a
+	different user id and/or password, you'll want to call NetUserPass()
+	first.  To work around the need to enter passwords, check if your ftp
+	supports a <.netrc> file in your home directory.  Also see
+	|netrw-passwd| (and if you're using ssh/scp hoping to figure out how
+	to not need to use passwords, look at |netrw-ssh-hack|).
+
+	:NetUserPass [uid [password]]		-- prompts as needed
+	:call NetUserPass()			-- prompts for uid and password
+	:call NetUserPass("uid")		-- prompts for password
+	:call NetUserPass("uid","password")	-- sets global uid and password
+
+NETRW VARIABLES AND SETTINGS				*netrw-variables* {{{2
+(also see: |netrw-browser-var| |netrw-protocol| |netrw-settings| |netrw-var|)
+
+Netrw provides a lot of variables which allow you to customize netrw to your
+preferences.  One way to look at them is via the command :NetrwSettings (see
+|netrw-settings|) which will display your current netrw settings.  Most such
+settings are described below, in |netrw-browser-options|, and in
+|netrw-externapp|:
+
+ *b:netrw_lastfile*	last file Network-read/written retained on a per-buffer
+			basis		(supports plain :Nw )
+
+ *g:netrw_ftp*		if it doesn't exist, use default ftp
+			=0 use default ftp		       (uid password)
+			=1 use alternate ftp method	  (user uid password)
+			If you're having trouble with ftp, try changing the
+			value of this variable to see if the alternate ftp
+			method works for your setup.
+
+ *g:netrw_extracmd*	default: doesn't exist
+                        If this variable exists, then any string it contains
+			will be placed into the commands set to your ftp
+			client.  As an example:
+			  ="passive"
+
+ *g:netrw_ftpmode*	="binary"				    (default)
+			="ascii"
+
+ *g:netrw_ignorenetrc*	=0 (default for linux, cygwin)
+			=1 If you have a <.netrc> file but it doesn't work and
+			   you want it ignored, then set this variable as
+			   shown. (default for Windows + cmd.exe)
+
+ *g:netrw_menu*		=0 disable netrw's menu
+			=1 (default) netrw's menu enabled
+
+ *g:netrw_nogx*		if this variable exists, then the "gx" map will not
+			be available (see |netrw-gx|)
+
+ *g:netrw_uid*		(ftp) user-id,      retained on a per-session basis
+ *s:netrw_passwd*	(ftp) password,     retained on a per-session basis
+
+ *g:netrw_preview*	=0 (default) preview window shown in a horizontally
+                           split window
+			=1 preview window shown in a vertically split window.
+			Also affects the "previous window" (see |netrw-P|) in
+			the same way.
+
+ *g:netrw_scpport*      = "-P" : option to use to set port for scp
+ *g:netrw_sshport*      = "-p" : option to use to set port for ssh
+
+  *g:netrw_silent*	=0 : transfers done normally
+			=1 : transfers done silently
+
+ *g:netrw_use_errorwindow* =1 : messages from netrw will use a separate one
+                                line window.  This window provides reliable
+				delivery of messages. (default)
+			   =0 : messages from netrw will use echoerr ;
+			        messages don't always seem to show up this
+				way, but one doesn't have to quit the window.
+
+ *g:netrw_win95ftp*	=1 if using Win95, will remove four trailing blank
+			   lines that o/s's ftp "provides" on transfers
+			=0 force normal ftp behavior (no trailing line removal)
+
+ *g:netrw_cygwin*	=1 assume scp under windows is from cygwin. Also
+			   permits network browsing to use ls with time and
+			   size sorting (default if windows)
+			=0 assume Windows' scp accepts windows-style paths
+			   Network browsing uses dir instead of ls
+			This option is ignored if you're using unix
+
+ *g:netrw_use_nt_rcp*	=0 don't use the rcp of WinNT, Win2000 and WinXP
+			=1 use WinNT's rcp in binary mode         (default)
+
+PATHS							*netrw-path* {{{2
+
+Paths to files are generally user-directory relative for most protocols.
+It is possible that some protocol will make paths relative to some
+associated directory, however.
+>
+	example:  vim scp://user@host/somefile
+	example:  vim scp://user@host/subdir1/subdir2/somefile
+<
+where "somefile" is in the "user"'s home directory.  If you wish to get a
+file using root-relative paths, use the full path:
+>
+	example:  vim scp://user@host//somefile
+	example:  vim scp://user@host//subdir1/subdir2/somefile
+<
+
+==============================================================================
+4. Network-Oriented File Transfer			*netrw-xfer* {{{1
+
+Network-oriented file transfer under Vim is implemented by a VimL-based script
+(<netrw.vim>) using plugin techniques.  It currently supports both reading and
+writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
+dav/cadaver, rsync, or sftp.
+
+http is currently supported read-only via use of wget or fetch.
+
+<netrw.vim> is a standard plugin which acts as glue between Vim and the
+various file transfer programs.  It uses autocommand events (BufReadCmd,
+FileReadCmd, BufWriteCmd) to intercept reads/writes with url-like filenames. >
+
+	ex. vim ftp://hostname/path/to/file
+<
+The characters preceding the colon specify the protocol to use; in the
+example, it's ftp.  The <netrw.vim> script then formulates a command or a
+series of commands (typically ftp) which it issues to an external program
+(ftp, scp, etc) which does the actual file transfer/protocol.  Files are read
+from/written to a temporary file (under Unix/Linux, /tmp/...) which the
+<netrw.vim> script will clean up.
+
+				*netrw-putty* *netrw-pscp* *netrw-psftp*
+One may modify any protocol's implementing external application by setting a
+variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
+"scp -q").  As an example, consider using PuTTY: >
+
+	let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
+	let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
+<
+See |netrw-p8| for more about putty, pscp, psftp, etc.
+
+Ftp, an old protocol, seems to be blessed by numerous implementations.
+Unfortunately, some implementations are noisy (ie., add junk to the end of the
+file).  Thus, concerned users may decide to write a NetReadFixup() function
+that will clean up after reading with their ftp.  Some Unix systems (ie.,
+FreeBSD) provide a utility called "fetch" which uses the ftp protocol but is
+not noisy and more convenient, actually, for <netrw.vim> to use.
+Consequently, if "fetch" is executable, it will be used to do reads for
+ftp://... (and http://...) .  See |netrw-var| for more about this.
+
+For rcp, scp, sftp, and http, one may use network-oriented file transfers
+transparently; ie.
+>
+	vim rcp://[user@]machine/path
+	vim scp://[user@]machine/path
+<
+If your ftp supports <.netrc>, then it too can be just as transparently used
+if the needed triad of machine name, user id, and password are present in
+that file.  Your ftp must be able to use the <.netrc> file on its own, however.
+>
+	vim ftp://[user@]machine[[:#]portnumber]/path
+<
+However, ftp will often need to query the user for the userid and password.
+The latter will be done "silently"; ie. asterisks will show up instead of
+the actually-typed-in password.  Netrw will retain the userid and password
+for subsequent read/writes from the most recent transfer so subsequent
+transfers (read/write) to or from that machine will take place without
+additional prompting.
+
+								*netrw-urls*
+  +=================================+============================+============+
+  |  Reading                        | Writing                    |  Uses      |
+  +=================================+============================+============+
+  | DAV:                            |                            |            |
+  |  dav://host/path                |                            | cadaver    |
+  |  :Nread dav://host/path         | :Nwrite dav://host/path    | cadaver    |
+  +---------------------------------+----------------------------+------------+
+  | DAV + SSL:                      |                            |            |
+  |  davs://host/path               |                            | cadaver    |
+  |  :Nread davs://host/path        | :Nwrite davs://host/path   | cadaver    |
+  +---------------------------------+----------------------------+------------+
+  | FETCH:                          |                            |            |
+  |  fetch://[user@]host/path       |                            |            |
+  |  fetch://[user@]host:http/path  |  Not Available             | fetch      |
+  |  :Nread fetch://[user@]host/path|                            |            |
+  +---------------------------------+----------------------------+------------+
+  | FILE:                           |                            |            |
+  |  file:///*                      | file:///*                  |            |
+  |  file://localhost/*             | file://localhost/*         |            |
+  +---------------------------------+----------------------------+------------+
+  | FTP:          (*3)              |              (*3)          |            |
+  |  ftp://[user@]host/path         | ftp://[user@]host/path     | ftp  (*2)  |
+  |  :Nread ftp://host/path         | :Nwrite ftp://host/path    | ftp+.netrc |
+  |  :Nread host path               | :Nwrite host path          | ftp+.netrc |
+  |  :Nread host uid pass path      | :Nwrite host uid pass path | ftp        |
+  +---------------------------------+----------------------------+------------+
+  | HTTP: wget is executable: (*4)  |                            |            |
+  |  http://[user@]host/path        |        Not Available       | wget       |
+  +---------------------------------+----------------------------+------------+
+  | HTTP: fetch is executable (*4)  |                            |            |
+  |  http://[user@]host/path        |        Not Available       | fetch      |
+  +---------------------------------+----------------------------+------------+
+  | RCP:                            |                            |            |
+  |  rcp://[user@]host/path         | rcp://[user@]host/path     | rcp        |
+  +---------------------------------+----------------------------+------------+
+  | RSYNC:                          |                            |            |
+  |  rsync://[user@]host/path       | rsync://[user@]host/path   | rsync      |
+  |  :Nread rsync://host/path       | :Nwrite rsync://host/path  | rsync      |
+  |  :Nread rcp://host/path         | :Nwrite rcp://host/path    | rcp        |
+  +---------------------------------+----------------------------+------------+
+  | SCP:                            |                            |            |
+  |  scp://[user@]host/path         | scp://[user@]host/path     | scp        |
+  |  :Nread scp://host/path         | :Nwrite scp://host/path    | scp  (*1)  |
+  +---------------------------------+----------------------------+------------+
+  | SFTP:                           |                            |            |
+  |  sftp://[user@]host/path        | sftp://[user@]host/path    | sftp       |
+  |  :Nread sftp://host/path        | :Nwrite sftp://host/path   | sftp  (*1) |
+  +=================================+============================+============+
+
+	(*1) For an absolute path use scp://machine//path.
+
+	(*2) if <.netrc> is present, it is assumed that it will
+	work with your ftp client.  Otherwise the script will
+	prompt for user-id and password.
+
+        (*3) for ftp, "machine" may be machine#port or machine:port
+	if a different port is needed than the standard ftp port
+
+	(*4) for http:..., if wget is available it will be used.  Otherwise,
+	if fetch is available it will be used.
+
+Both the :Nread and the :Nwrite ex-commands can accept multiple filenames.
+
+
+NETRC							*netrw-netrc*
+
+The <.netrc> file, typically located in your home directory, contains lines
+therein which map a hostname (machine name) to the user id and password you
+prefer to use with it.
+
+The typical syntax for lines in a <.netrc> file is given as shown below.
+Ftp under Unix usually supports <.netrc>; ftp under Windows usually doesn't.
+>
+	machine {full machine name} login {user-id} password "{password}"
+	default login {user-id} password "{password}"
+
+Your ftp client must handle the use of <.netrc> on its own, but if the
+<.netrc> file exists, an ftp transfer will not ask for the user-id or
+password.
+
+	Note:
+	Since this file contains passwords, make very sure nobody else can
+	read this file!  Most programs will refuse to use a .netrc that is
+	readable for others.  Don't forget that the system administrator can
+	still read the file!  Ie. for Linux/Unix: chmod 600 .netrc
+
+
+PASSWORD						*netrw-passwd*
+
+The script attempts to get passwords for ftp invisibly using |inputsecret()|,
+a built-in Vim function.  See |netrw-uidpass| for how to change the password
+after one has set it.
+
+Unfortunately there doesn't appear to be a way for netrw to feed a password to
+scp.  Thus every transfer via scp will require re-entry of the password.
+However, |netrw-ssh-hack| can help with this problem.
+
+
+==============================================================================
+5. Activation						*netrw-activate* {{{1
+
+Network-oriented file transfers are available by default whenever Vim's
+|'nocompatible'| mode is enabled.  Netrw's script files reside in your
+system's plugin, autoload, and syntax directories; just the
+plugin/netrwPlugin.vim script is sourced automatically whenever you bring up
+vim.  The main script in autoload/netrw.vim is only loaded when you actually
+use netrw.  I suggest that, at a minimum, you have at least the following in
+your <.vimrc> customization file: >
+
+	set nocp
+	if version >= 600
+	  filetype plugin indent on
+	endif
+<
+
+==============================================================================
+6. Transparent File Editing			*netrw-transparent* {{{1
+
+Transparent file transfers occur whenever a regular file read or write
+(invoked via an |:autocmd| for |BufReadCmd|, |BufWriteCmd|, or |SourceCmd|
+events) is made.  Thus one may read, write, or source  files across networks
+just as easily as if they were local files! >
+
+	vim ftp://[user@]machine/path
+	...
+	:wq
+
+See |netrw-activate| for more on how to encourage your vim to use plugins
+such as netrw.
+
+
+==============================================================================
+7. Ex Commands						*netrw-ex* {{{1
+
+The usual read/write commands are supported.  There are also a few
+additional commands available.  Often you won't need to use Nwrite or
+Nread as shown in |netrw-transparent| (ie. simply use >
+  :e url
+  :r url
+  :w url
+instead, as appropriate) -- see |netrw-urls|.  In the explanations
+below, a {netfile} is an url to a remote file.
+
+:[range]Nw[rite]	Write the specified lines to the current
+		file as specified in b:netrw_lastfile.
+
+:[range]Nw[rite] {netfile} [{netfile}]...
+		Write the specified lines to the {netfile}.
+
+:Nr[ead]		Read the specified lines into the current
+		buffer from the file specified in
+		b:netrw_lastfile.
+
+:Nr[ead] {netfile} {netfile}...
+		Read the {netfile} after the current line.
+
+:Ns[ource] {netfile}
+		Source the {netfile}.
+		To start up vim using a remote .vimrc, one may use
+		the following (all on one line) (tnx to Antoine Mechelynck) >
+		vim -u NORC -N
+		 --cmd "runtime plugin/netrwPlugin.vim"
+		 --cmd "source scp://HOSTNAME/.vimrc"
+<								*netrw-uidpass*
+:call NetUserPass()
+		If g:netrw_uid and s:netrw_passwd don't exist,
+		this function will query the user for them.
+
+:call NetUserPass("userid")
+		This call will set the g:netrw_uid and, if
+		the password doesn't exist, will query the user for it.
+
+:call NetUserPass("userid","passwd")
+		This call will set both the g:netrw_uid and s:netrw_passwd.
+		The user-id and password are used by ftp transfers.  One may
+		effectively remove the user-id and password by using empty
+		strings (ie. "").
+
+:NetrwSettings  This command is described in |netrw-settings| -- used to
+                display netrw settings and change netrw behavior.
+
+
+==============================================================================
+8. Variables and Options		*netrw-options* *netrw-var* {{{1
+
+(if you're interested in the netrw browser settings, see: |netrw-browser-var|)
+
+The <netrw.vim> script provides several variables which act as options to
+affect <netrw.vim>'s file transfer behavior.  These variables typically may be
+set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
+
+>
+
+                        -------------
+                        Netrw Options
+                        -------------
+	Option			Meaning
+	--------------		-----------------------------------------------
+<
+        b:netrw_col             Holds current cursor position (during NetWrite)
+        g:netrw_cygwin          =1 assume scp under windows is from cygwin
+                                                              (default/windows)
+                                =0 assume scp under windows accepts windows
+                                   style paths                (default/else)
+        g:netrw_ftp             =0 use default ftp            (uid password)
+        g:netrw_ftpmode         ="binary"                     (default)
+                                ="ascii"                      (your choice)
+	g:netrw_ignorenetrc     =1                            (default)
+	                           if you have a <.netrc> file but you don't
+				   want it used, then set this variable.  Its
+				   mere existence is enough to cause <.netrc>
+				   to be ignored.
+        b:netrw_lastfile        Holds latest method/machine/path.
+        b:netrw_line            Holds current line number     (during NetWrite)
+        g:netrw_passwd          Holds current password for ftp.
+	g:netrw_silent          =0 transfers done normally
+	                        =1 transfers done silently
+        g:netrw_uid             Holds current user-id for ftp.
+                                =1 use alternate ftp         (user uid password)
+                                (see |netrw-options|)
+        g:netrw_use_nt_rcp      =0 don't use WinNT/2K/XP's rcp (default)
+                                =1 use WinNT/2K/XP's rcp, binary mode
+        g:netrw_win95ftp        =0 use unix-style ftp even if win95/98/ME/etc
+                                =1 use default method to do ftp >
+	-----------------------------------------------------------------------
+<
+The script will also make use of the following variables internally, albeit
+temporarily.
+>
+			     -------------------
+			     Temporary Variables
+			     -------------------
+	Variable		Meaning
+	--------		------------------------------------
+<
+	g:netrw_method		Index indicating rcp/ftp+.netrc/ftp
+	g:netrw_machine		Holds machine name parsed from input
+	g:netrw_fname		Holds filename being accessed >
+	------------------------------------------------------------
+<
+							*netrw-protocol*
+
+Netrw supports a number of protocols.  These protocols are invoked using the
+variables listed below, and may be modified by the user.
+>
+			   ------------------------
+                           Protocol Control Options
+			   ------------------------
+    Option            Type        Setting         Meaning
+    ---------         --------    --------------  ---------------------------
+<
+    netrw_ftp         variable    =doesn't exist  userid set by "user userid"
+                                  =0              userid set by "user userid"
+                                  =1              userid set by "userid"
+    NetReadFixup      function    =doesn't exist  no change
+                                  =exists         Allows user to have files
+                                                  read via ftp automatically
+                                                  transformed however they wish
+                                                  by NetReadFixup()
+    g:netrw_dav_cmd    variable   ="cadaver"
+    g:netrw_fetch_cmd  variable   ="fetch -o"     if fetch is available
+    g:netrw_ftp_cmd    variable   ="ftp"
+    g:netrw_http_cmd   variable   ="fetch -o"     if      fetch is available
+    g:netrw_http_cmd   variable   ="wget -O"      else if wget  is available
+    g:netrw_list_cmd   variable   ="ssh USEPORT HOSTNAME ls -Fa"
+    g:netrw_rcp_cmd    variable   ="rcp"
+    g:netrw_rsync_cmd  variable   ="rsync -a"
+    g:netrw_scp_cmd    variable   ="scp -q"
+    g:netrw_sftp_cmd   variable   ="sftp" >
+    -------------------------------------------------------------------------
+<
+								*netrw-ftp*
+
+The g:netrw_..._cmd options (|g:netrw_ftp_cmd| and |g:netrw_sftp_cmd|)
+specify the external program to use handle the ftp protocol.  They may
+include command line options (such as -p for passive mode).
+
+Browsing is supported by using the |g:netrw_list_cmd|; the substring
+"HOSTNAME" will be changed via substitution with whatever the current request
+is for a hostname.
+
+Two options (|g:netrw_ftp| and |netrw-fixup|) both help with certain ftp's
+that give trouble .  In order to best understand how to use these options if
+ftp is giving you troubles, a bit of discussion is provided on how netrw does
+ftp reads.
+
+For ftp, netrw typically builds up lines of one of the following formats in a
+temporary file:
+>
+  IF g:netrw_ftp !exists or is not 1     IF g:netrw_ftp exists and is 1
+  ----------------------------------     ------------------------------
+<
+       open machine [port]                    open machine [port]
+       user userid password                   userid password
+       [g:netrw_ftpmode]                      password
+       [g:netrw_extracmd]                     [g:netrw_ftpmode]
+       get filename tempfile                  [g:netrw_extracmd]
+                                              get filename tempfile >
+  ---------------------------------------------------------------------
+<
+The |g:netrw_ftpmode| and |g:netrw_extracmd| are optional.
+
+Netrw then executes the lines above by use of a filter:
+>
+	:%! {g:netrw_ftp_cmd} -i [-n]
+<
+where
+	g:netrw_ftp_cmd is usually "ftp",
+	-i tells ftp not to be interactive
+	-n means don't use netrc and is used for Method #3 (ftp w/o <.netrc>)
+
+If <.netrc> exists it will be used to avoid having to query the user for
+userid and password.  The transferred file is put into a temporary file.
+The temporary file is then read into the main editing session window that
+requested it and the temporary file deleted.
+
+If your ftp doesn't accept the "user" command and immediately just demands a
+userid, then try putting "let netrw_ftp=1" in your <.vimrc>.
+
+								*netrw-cadaver*
+To handle the SSL certificate dialog for untrusted servers, one may pull
+down the certificate and place it into /usr/ssl/cert.pem.  This operation
+renders the server treatment as "trusted".
+
+						*netrw-fixup* *netreadfixup*
+If your ftp for whatever reason generates unwanted lines (such as AUTH
+messages) you may write a NetReadFixup(tmpfile) function:
+>
+    function! NetReadFixup(method,line1,line2)
+      " a:line1: first new line in current file
+      " a:line2: last  new line in current file
+      if     a:method == 1 "rcp
+      elseif a:method == 2 "ftp + <.netrc>
+      elseif a:method == 3 "ftp + machine,uid,password,filename
+      elseif a:method == 4 "scp
+      elseif a:method == 5 "http/wget
+      elseif a:method == 6 "dav/cadaver
+      elseif a:method == 7 "rsync
+      elseif a:method == 8 "fetch
+      elseif a:method == 9 "sftp
+      else               " complain
+      endif
+    endfunction
+>
+The NetReadFixup() function will be called if it exists and thus allows you to
+customize your reading process.  As a further example, <netrw.vim> contains
+just such a function to handle Windows 95 ftp.  For whatever reason, Windows
+95's ftp dumps four blank lines at the end of a transfer, and so it is
+desirable to automate their removal.  Here's some code taken from <netrw.vim>
+itself:
+>
+    if has("win95") && g:netrw_win95ftp
+     fun! NetReadFixup(method, line1, line2)
+       if method == 3   " ftp (no <.netrc>)
+        let fourblanklines= line2 - 3
+        silent fourblanklines.",".line2."g/^\s*/d"
+       endif
+     endfunction
+    endif
+>
+
+==============================================================================
+9. Browsing		*netrw-browsing* *netrw-browse* *netrw-help* {{{1
+   			*netrw-browser*  *netrw-dir*    *netrw-list*
+
+INTRODUCTION TO BROWSING			*netrw-intro-browse* {{{2
+	(Quick References: |netrw-quickmaps| |netrw-quickcoms|)
+
+Netrw supports the browsing of directories on your local system and on remote
+hosts; browsing includes listing files and directories, entering directories,
+editing files therein, deleting files/directories, making new directories,
+moving (renaming) files and directories, copying files and directories, etc.
+One may mark files and execute any system command on them!  The Netrw browser
+generally implements the previous explorer's maps and commands for remote
+directories, although details (such as pertinent global variable names)
+necessarily differ.  To browse a directory, simply "edit" it! >
+
+	vim /your/directory/
+	vim .
+	vim c:\your\directory\
+<
+(Related topics: |netrw-cr|  |netrw-o|  |netrw-p| |netrw-P| |netrw-t|
+                 |netrw-mf|  |netrw-mx| |netrw-D| |netrw-R| |netrw-v| )
+
+The Netrw remote file and directory browser handles two protocols: ssh and
+ftp.  The protocol in the url, if it is ftp, will cause netrw also to use ftp
+in its remote browsing.  Specifying any other protocol will cause it to be
+used for file transfers; but the ssh protocol will be used to do remote
+browsing.
+
+To use Netrw's remote directory browser, simply attempt to read a "file" with
+a trailing slash and it will be interpreted as a request to list a directory:
+>
+	vim [protocol]://[user@]hostname/path/
+<
+where [protocol] is typically scp or ftp.  As an example, try: >
+
+	vim ftp://ftp.home.vim.org/pub/vim/
+<
+For local directories, the trailing slash is not required.  Again, because its
+easy to miss: to browse remote directories, the url must terminate with a
+slash!
+
+If you'd like to avoid entering the password repeatedly for remote directory
+listings with ssh or scp, see |netrw-ssh-hack|.  To avoid password entry with
+ftp, see |netrw-netrc| (if your ftp supports it).
+
+There are several things you can do to affect the browser's display of files:
+
+	* To change the listing style, press the "i" key (|netrw-i|).
+	  Currently there are four styles: thin, long, wide, and tree.
+
+	* To hide files (don't want to see those xyz~ files anymore?) see
+	  |netrw-ctrl-h|.
+
+	* Press s to sort files by name, time, or size.
+
+See |netrw-browse-cmds| for all the things you can do with netrw!
+
+
+QUICK HELP						*netrw-quickhelp* {{{2
+                       (Use ctrl-] to select a topic)~
+	Intro to Browsing...............................|netrw-intro-browse|
+	  Quick Reference: Maps.........................|netrw-quickmap|
+	  Quick Reference: Commands.....................|netrw-browse-cmds|
+	Hiding
+	  Edit hiding list..............................|netrw-ctrl-h|
+	  Hiding Files or Directories...................|netrw-a|
+	  Hiding/Unhiding by suffix.....................|netrw-mh|
+	  Hiding  dot-files.............................|netrw-gh|
+	Listing Style
+	  Select listing style (thin/long/wide/tree)....|netrw-i|
+	  Associated setting variable...................|g:netrw_liststyle|
+	  Shell command used to perform listing.........|g:netrw_list_cmd|
+	  Quick file info...............................|netrw-qf|
+	Sorted by
+	  Select sorting style (name/time/size).........|netrw-s|
+	  Editing the sorting sequence..................|netrw-S|
+	  Sorting options...............................|g:netrw_sort_options|
+	  Associated setting variable...................|g:netrw_sort_sequence|
+	  Reverse sorting order.........................|netrw-r|
+
+
+				*netrw-quickmap* *netrw-quickmaps*
+QUICK REFERENCE: MAPS				*netrw-browse-maps* {{{2
+>
+	  ---			-----------------			----
+	  Map			Quick Explanation			Link
+	  ---			-----------------			----
+<	 <F1>	Causes Netrw to issue help
+	 <cr>	Netrw will enter the directory or read the file      |netrw-cr|
+	 <del>	Netrw will attempt to remove the file/directory      |netrw-del|
+	   -	Makes Netrw go up one directory                      |netrw--|
+	   a	Toggles between normal display,                      |netrw-a|
+		hiding (suppress display of files matching g:netrw_list_hide)
+		showing (display only files which match g:netrw_list_hide)
+	   c	Make browsing directory the current directory        |netrw-c|
+	   d	Make a directory                                     |netrw-d|
+	   D	Attempt to remove the file(s)/directory(ies)         |netrw-D|
+	   gb	Go to previous bookmarked directory                  |netrw-gb|
+	   gh	Quick hide/unhide of dot-files                       |netrw-gh|
+	   gi	Display information on file                          |netrw-qf|
+	 <c-h>	Edit file hiding list                             |netrw-ctrl-h|
+	   i	Cycle between thin, long, wide, and tree listings    |netrw-i|
+	 <c-l>	Causes Netrw to refresh the directory listing     |netrw-ctrl-l|
+	   mb	Bookmark current directory                           |netrw-mb|
+	   mc	Copy marked files to marked-file target directory    |netrw-mc|
+	   md	Apply diff to marked files (up to 3)                 |netrw-md|
+	   me	Place marked files on arg list and edit them         |netrw-me|
+	   mf	Mark a file                                          |netrw-mf|
+	   mh	Toggle marked file suffices' presence on hiding list |netrw-mh|
+	   mm	Move marked files to marked-file target directory    |netrw-mm|
+	   mp	Print marked files                                   |netrw-mp|
+	   mr	Mark files satisfying a |regexp|                     |netrw-mr|
+	   mt	Current browsing directory becomes markfile target   |netrw-mt|
+	   mT	Apply ctags to marked files                          |netrw-mT|
+	   mu	Unmark all marked files                              |netrw-mu|
+	   mx	Apply arbitrary shell command to marked files        |netrw-mx|
+	   mz	Compress/decompress marked files                     |netrw-mz|
+	   o	Enter the file/directory under the cursor in a new   |netrw-o|
+	   	browser window.  A horizontal split is used.
+	   O	Obtain a file specified by cursor                    |netrw-O|
+	   p	Preview the file                                     |netrw-p|
+	   P	Browse in the previously used window                 |netrw-P|
+	   q	List bookmarked directories and history              |netrw-qb|
+	   r	Reverse sorting order                                |netrw-r|
+	   R	Rename the designed file(s)/directory(ies)           |netrw-R|
+	   s	Select sorting style: by name, time, or file size    |netrw-s|
+	   S	Specify suffix priority for name-sorting             |netrw-S|
+	   t	Enter the file/directory under the cursor in a new tab|netrw-t|
+	   u	Change to recently-visited directory                 |netrw-u|
+	   U	Change to subsequently-visited directory             |netrw-U|
+	   v	Enter the file/directory under the cursor in a new   |netrw-v|
+	   	browser window.  A vertical split is used.
+	   x	View file with an associated program                 |netrw-x|
+
+	   %	Open a new file in netrw's current directory         |netrw-%|
+
+	<leftmouse>	(gvim only) selects word under mouse as if a <cr>
+			had been pressed (ie. edit file, change directory)
+	<middlemouse>	(gvim only) same as P selecting word under mouse;
+			see |netrw-P|
+	<rightmouse>	(gvim only) delete file/directory using word under
+			mouse
+	<2-leftmouse>	(gvim only) when:
+	                 * in a netrw-selected file, AND
+		         * |g:netrw_retmap| == 1     AND
+		         * the user doesn't already have a <2-leftmouse> mapping
+			   defined before netrw is autoloaded,
+			then a double clicked leftmouse button will return
+			to the netrw browser window.
+	<s-leftmouse>	(gvim only) like mf, will mark files
+
+				*netrw-quickcom* *netrw-quickcoms*
+QUICK REFERENCE: COMMANDS	*netrw-explore-cmds* *netrw-browse-cmds* {{{2
+     :NetrwClean[!] ...........................................|netrw-clean|
+     :NetrwSettings ...........................................|netrw-settings|
+     :Explore[!]  [dir] Explore directory of current file......|netrw-explore|
+     :Hexplore[!] [dir] Horizontal Split & Explore.............|netrw-explore|
+     :Nexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
+     :Pexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
+     :Rexplore          Return to Explorer.....................|netrw-explore|
+     :Sexplore[!] [dir] Split & Explore directory .............|netrw-explore|
+     :Texplore[!] [dir] Tab & Explore..........................|netrw-explore|
+     :Vexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
+
+BOOKMARKING A DIRECTORY	*netrw-mb* *netrw-bookmark* *netrw-bookmarks* {{{2
+One may easily "bookmark" a directory by using >
+
+	{cnt}mb
+<
+Any count may be used.  One may use viminfo's "!" option (|'viminfo'|) to
+retain bookmarks between vim sessions.  See |netrw-gb| for how to return
+to a bookmark and |netrw-qb| for how to list them.
+
+
+BROWSING						*netrw-cr* {{{2
+
+Browsing is simple: move the cursor onto a file or directory of interest.
+Hitting the <cr> (the return key) will select the file or directory.
+Directories will themselves be listed, and files will be opened using the
+protocol given in the original read request.  
+
+  CAVEAT: There are four forms of listing (see |netrw-i|).  Netrw assumes that
+  two or more spaces delimit filenames and directory names for the long and
+  wide listing formats.  Thus, if your filename or directory name has two or
+  more sequential spaces embedded in it, or any trailing spaces, then you'll
+  need to use the "thin" format to select it.
+
+The |g:netrw_browse_split| option, which is zero by default, may be used to
+cause the opening of files to be done in a new window or tab instead of the
+default.  When the option is one or two, the splitting will be taken
+horizontally or vertically, respectively.  When the option is set to three, a
+<cr> will cause the file to appear in a new tab.
+
+
+When using the gui (gvim) one may select a file by pressing the <leftmouse>
+button.  In addtion, if
+
+ *|g:netrw_retmap| == 1      AND   (its default value is 0)
+ * in a netrw-selected file, AND
+ * the user doesn't already have a <2-leftmouse> mapping defined before
+   netrw is loaded
+
+then a doubly-clicked leftmouse button will return to the netrw browser
+window.
+
+Netrw attempts to speed up browsing, especially for remote browsing where one
+may have to enter passwords, by keeping and re-using previously obtained
+directory listing buffers.  The |g:netrw_fastbrowse| variable is used to
+control this behavior; one may have slow browsing (no buffer re-use), medium
+speed browsing (re-use directory buffer listings only for remote directories),
+and fast browsing (re-use directory buffer listings as often as possible).
+The price for such re-use is that when changes are made (such as new files
+are introduced into a directory), the listing may become out-of-date.  One may
+always refresh directory listing buffers by pressing ctrl-L (see
+|netrw-ctrl-l|).
+
+
+Related topics: |netrw-o| |netrw-p| |netrw-P| |netrw-t| |netrw-v|
+Associated setting variables: |g:netrw_browse_split|      |g:netrw_fastbrowse|
+                              |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd|
+			      |g:netrw_ftp_timelist_cmd|  |g:netrw_ssh_cmd|
+			      |g:netrw_ssh_browse_reject| |g:netrw_use_noswf|
+
+
+BROWSING WITH A HORIZONTALLY SPLIT WINDOW	*netrw-o* *netrw-horiz* {{{2
+
+Normally one enters a file or directory using the <cr>.  However, the "o" map
+allows one to open a new window to hold the new directory listing or file.  A
+horizontal split is used.  (for vertical splitting, see |netrw-v|)
+
+Normally, the o key splits the window horizontally with the new window and
+cursor at the top.  To change to splitting the window horizontally with the
+new window and cursor at the bottom, have
+
+	let g:netrw_alto = 1
+
+in your <.vimrc>.  (also see |netrw-t| |netrw-v|)
+
+There is only one tree listing buffer; using "o" on a displayed subdirectory 
+will split the screen, but the same buffer will be shown twice.
+
+Associated setting variables: |g:netrw_alto| |g:netrw_winsize|
+
+
+BROWSING WITH A NEW TAB				*netrw-t* {{{2
+
+Normally one enters a file or directory using the <cr>.  The "t" map
+allows one to open a new window hold the new directory listing or file in a
+new tab. (also see: |netrw-o| |netrw-v|)
+
+
+BROWSING WITH A VERTICALLY SPLIT WINDOW			*netrw-v* {{{2
+
+Normally one enters a file or directory using the <cr>.  However, the "v" map
+allows one to open a new window to hold the new directory listing or file.  A
+vertical split is used.  (for horizontal splitting, see |netrw-o|)
+
+Normally, the v key splits the window vertically with the new window and
+cursor at the left.  To change to splitting the window vertically with the new
+window and cursor at the right, have
+
+	let g:netrw_altv = 1
+
+in your <.vimrc>.  (also see: |netrw-o| |netrw-t|)
+
+There is only one tree listing buffer; using "v" on a displayed subdirectory 
+will split the screen, but the same buffer will be shown twice.
+
+Associated setting variable: |g:netrw_altv| |g:netrw_winsize|
+
+CHANGE LISTING STYLE					*netrw-i* {{{2
+
+The "i" map cycles between the thin, long, wide, and tree listing formats.
+
+The short listing format gives just the files' and directories' names.
+
+The long listing is either based on the "ls" command via ssh for remote
+directories or displays the filename, file size (in bytes), and the time and
+date of last modification for local directories.  With the long listing
+format, netrw is not able to recognize filenames which have trailing spaces.
+Use the thin listing format for such files.
+
+The wide listing format uses two or more contiguous spaces to delineate
+filenames; when using that format, netrw won't be able to recognize or use
+filenames which have two or more contiguous spaces embedded in the name or any
+trailing spaces.  The thin listing format will, however, work with such files.
+This listing format is the most compact.
+
+The tree listing format has a top directory followed by files and directories
+preceded by a "|".  One may open and close directories by pressing the <cr>
+key while atop the directory name.  There is only one tree listing buffer;
+hence, using "v" or "o" on a subdirectory will only show the same buffer,
+twice.
+
+Associated setting variables: |g:netrw_liststyle| |g:netrw_maxfilenamelen|
+                              |g:netrw_timefmt|   |g:netrw_list_cmd|
+
+
+CHANGING TO A BOOKMARKED DIRECTORY			*netrw-gb*  {{{2
+
+To change directory back to a bookmarked directory, use
+
+	{cnt}gb
+
+Any count may be used to reference any of the bookmarks.  See |netrw-mb| on
+how to bookmark a directory and |netrw-qb| on how to list bookmarks.
+
+
+CHANGING TO A PREDECESSOR DIRECTORY	*netrw-u* *netrw-updir* {{{2
+
+Every time you change to a new directory (new for the current session),
+netrw will save the directory in a recently-visited directory history
+list (unless g:netrw_dirhistmax is zero; by default, it's ten).  With the
+"u" map, one can change to an earlier directory (predecessor).  To do
+the opposite, see |netrw-U|.
+
+
+CHANGING TO A SUCCESSOR DIRECTORY		*netrw-U* *netrw-downdir* {{{2
+
+With the "U" map, one can change to a later directory (successor).
+This map is the opposite of the "u" map. (see |netrw-u|)  Use the
+q map to list both the bookmarks and history. (see |netrw-qb|)
+
+
+NETRW CLEAN					*netrw-clean* *:NetrwClean*
+
+With :NetrwClean one may easily remove netrw from one's home directory;
+more precisely, from the first directory on your |'runtimepath'|.
+
+With :NetrwClean!, netrw will remove netrw from all directories on your
+|'runtimepath'|.
+
+With either form of the command, netrw will first ask for confirmation
+that the removal is in fact what you want to do.  If netrw doesn't have
+permission to remove a file, it will issue an error message.
+
+						*netrw-gx*
+CUSTOMIZING BROWSING WITH A USER FUNCTION	*netrw-x* *netrw-handler* {{{2
+						(also see |netrw_filehandler|)
+
+Certain files, such as html, gif, jpeg, (word/office) doc, etc, files, are
+best seen with a special handler (ie. a tool provided with your computer).
+Netrw allows one to invoke such special handlers by: >
+
+	* when Exploring, hit the "x" key
+	* when editing, hit gx with the cursor atop the special filename
+<	  (not available if the |g:netrw_nogx| variable exists)
+
+Netrw determines which special handler by the following method:
+
+  * if |g:netrw_browsex_viewer| exists, then it will be used to attempt to
+    view files.  Examples of useful settings (place into your <.vimrc>): >
+
+	:let g:netrw_browsex_viewer= "kfmclient exec"
+<   or >
+	:let g:netrw_browsex_viewer= "gnome-open"
+<
+    If g:netrw_browsex_viewer == '-', then netrwFileHandler() will be
+    invoked first (see |netrw_filehandler|).
+
+  * for Windows 32 or 64, the url and FileProtocolHandler dlls are used.  
+  * for Gnome (with gnome-open): gnome-open is used.
+  * for KDE (with kfmclient)   : kfmclient is used.
+  * for Mac OS X               : open is used.
+  * otherwise the netrwFileHandler plugin is used.
+
+The file's suffix is used by these various approaches to determine an
+appropriate application to use to "handle" these files.  Such things as
+OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript (*.ps,
+*.eps) can be handled.
+
+							*netrw_filehandler*
+
+The "x" map applies a function to a file, based on its extension.  Of course,
+the handler function must exist for it to be called!
+>
+ Ex. mypgm.html   x ->
+                  NFH_html("scp://user@host/some/path/mypgm.html")
+<
+Users may write their own netrw File Handler functions to support more
+suffixes with special handling.  See <plugin/netrwFileHandlers.vim> for
+examples on how to make file handler functions.   As an example: >
+
+	" NFH_suffix(filename)
+	fun! NFH_suffix(filename)
+	..do something special with filename..
+	endfun
+<
+These functions need to be defined in some file in your .vim/plugin
+(vimfiles\plugin) directory.  Vim's function names may not have punctuation
+characters (except for the underscore) in them.  To support suffices that
+contain such characters, netrw will first convert the suffix using the
+following table: >
+
+    @ -> AT       ! -> EXCLAMATION    % -> PERCENT  
+    : -> COLON    = -> EQUAL          ? -> QUESTION 
+    , -> COMMA    - -> MINUS          ; -> SEMICOLON
+    $ -> DOLLAR   + -> PLUS           ~ -> TILDE    
+<    
+So, for example: >
+
+	file.rcs,v  ->  NFH_rcsCOMMAv()
+<
+If more such translations are necessary, please send me email: >
+		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
+with a request.
+
+Associated setting variable: |g:netrw_browsex_viewer|
+
+							*netrw-curdir*
+DELETING FILES OR DIRECTORIES	*netrw-delete* *netrw-D* *netrw-del* {{{2
+
+If files have not been marked with |netrw-mf|:   (local marked file list)
+
+    Deleting/removing files and directories involves moving the cursor to the
+    file/directory to be deleted and pressing "D".  Directories must be empty
+    first before they can be successfully removed.  If the directory is a
+    softlink to a directory, then netrw will make two requests to remove the
+    directory before succeeding.  Netrw will ask for confirmation before doing
+    the removal(s).  You may select a range of lines with the "V" command
+    (visual selection), and then pressing "D".
+
+If files have been marked with |netrw-mf|:   (local marked file list)
+
+    Marked files (and empty directories) will be deleted; again, you'll be
+    asked to confirm the deletion before it actually takes place.
+
+The |g:netrw_rm_cmd|, |g:netrw_rmf_cmd|, and |g:netrw_rmdir_cmd| variables are
+used to control the attempts to remove files and directories.  The
+g:netrw_rm_cmd is used with files, and its default value is:
+
+	g:netrw_rm_cmd: ssh HOSTNAME rm
+
+The g:netrw_rmdir_cmd variable is used to support the removal of directories.
+Its default value is:
+
+	g:netrw_rmdir_cmd: ssh HOSTNAME rmdir
+
+If removing a directory fails with g:netrw_rmdir_cmd, netrw then will attempt
+to remove it again using the g:netrw_rmf_cmd variable.  Its default value is:
+
+	g:netrw_rmf_cmd: ssh HOSTNAME rm -f
+
+Associated setting variable: |g:netrw_local_rmdir| |g:netrw_rm_cmd|
+                             |g:netrw_rmdir_cmd|   |g:netrw_ssh_cmd|
+
+
+*netrw-explore*  *netrw-hexplore* *netrw-nexplore* *netrw-pexplore*
+*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore*
+DIRECTORY EXPLORATION COMMANDS  {{{2
+
+     :Explore[!]   [dir]... Explore directory of current file       *:Explore*
+     :Hexplore[!]  [dir]... Horizontal Split & Explore              *:Hexplore*
+     :Rexplore          ... Return to Explorer                      *:Rexplore*
+     :Sexplore[!]  [dir]... Split&Explore directory of current file *:Sexplore*
+     :Texplore     [dir]... Tab              & Explore              *:Texplore*
+     :Vexplore[!]  [dir]... Vertical   Split & Explore              *:Vexplore*
+
+     Used with :Explore **/pattern : (also see |netrw-starstar|)
+     :Nexplore............. go to next matching file                *:Nexplore*
+     :Pexplore............. go to previous matching file            *:Pexplore*
+
+:Explore  will open the local-directory browser on the current file's
+          directory (or on directory [dir] if specified).  The window will be
+	  split only if the file has been modified, otherwise the browsing
+	  window will take over that window.  Normally the splitting is taken
+	  horizontally.
+:Explore! is like :Explore, but will use vertical splitting.
+:Sexplore will always split the window before invoking the local-directory
+          browser.  As with Explore, the splitting is normally done
+	  horizontally.
+:Sexplore! [dir] is like :Sexplore, but the splitting will be done vertically.
+:Hexplore  [dir] does an :Explore with |:belowright| horizontal splitting.
+:Hexplore! [dir] does an :Explore with |:aboveleft|  horizontal splitting.
+:Vexplore  [dir] does an :Explore with |:leftabove|  vertical splitting.
+:Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
+:Texplore  [dir] does a tabnew before generating the browser window
+
+By default, these commands use the current file's directory.  However, one
+may explicitly provide a directory (path) to use.
+
+The |g:netrw_winsize| variable also is used, if specified by the user, to
+size Hexplore and Vexplore windows.
+
+:Rexplore  This command is a little different from the others.  When one
+           edits a file, for example by pressing <cr> when atop a file in
+	   a netrw browser window, :Rexplore will return the display to
+	   that of the last netrw browser window.  Its a command version
+	   of <2-leftmouse> (which is only available under gvim and
+	   cooperative terms).
+
+
+*netrw-star* *netrw-starpat* *netrw-starstar* *netrw-starstarpat*
+EXPLORING WITH STARS AND PATTERNS
+
+When Explore, Sexplore, Hexplore, or Vexplore are used with one of the
+following four styles, Explore generates a list of files which satisfy
+the request. >
+
+    */filepat	files in current directory which satisfy filepat
+    **/filepat	files in current directory or below which satisfy the
+    		file pattern
+    *//pattern	files in the current directory which contain the
+    		pattern (vimgrep is used)
+    **//pattern	files in the current directory or below which contain
+    		the pattern (vimgrep is used)
+<
+The cursor will be placed on the first file in the list.  One may then
+continue to go to subsequent files on that list via |:Nexplore| or to
+preceding files on that list with |:Pexplore|.  Explore will update the
+directory and place the cursor appropriately.
+
+A plain >
+	:Explore
+will clear the explore list.
+
+If your console or gui produces recognizable shift-up or shift-down sequences,
+then you'll likely find using shift-downarrow and shift-uparrow convenient.
+They're mapped by netrw:
+
+	<s-down>  == Nexplore, and
+	<s-up>    == Pexplore.
+
+As an example, consider
+>
+	:Explore */*.c
+	:Nexplore
+	:Nexplore
+	:Pexplore
+<
+The status line will show, on the right hand side of the status line, a
+message like "Match 3 of 20".
+
+Associated setting variables: |g:netrw_keepdir|      |g:netrw_browse_split|
+                              |g:netrw_fastbrowse|   |g:netrw_ftp_browse_reject|
+			      |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd|
+			      |g:netrw_ftp_timelist_cmd| |g:netrw_list_cmd|
+			      |g:netrw_liststyle|
+
+
+DISPLAYING INFORMATION ABOUT FILE				*netrw-qf* {{{2
+
+With the cursor atop a filename, pressing "qf" will reveal the file's size
+and last modification timestamp.  Currently this capability is only available
+for local files.
+
+
+EDIT FILE OR DIRECTORY HIDING LIST	*netrw-ctrl-h* *netrw-edithide* {{{2
+
+The "<ctrl-h>" map brings up a requestor allowing the user to change the
+file/directory hiding list contained in |g:netrw_list_hide|.  The hiding list
+consists of one or more patterns delimited by commas.  Files and/or
+directories satisfying these patterns will either be hidden (ie. not shown) or
+be the only ones displayed (see |netrw-a|).
+
+The "gh" mapping (see |netrw-gh|) quickly alternates between the usual
+hiding list and the hiding of files or directories that begin with ".".
+
+Associated setting variables: |g:netrw_hide| |g:netrw_list_hide|
+Associated topics: |netrw-a| |netrw-gh| |netrw-mh|
+
+
+EDITING THE SORTING SEQUENCE		*netrw-S* *netrw-sortsequence* {{{2
+
+When "Sorted by" is name, one may specify priority via the sorting sequence
+(g:netrw_sort_sequence).  The sorting sequence typically prioritizes the
+name-listing by suffix, although any pattern will do.  Patterns are delimited
+by commas.  The default sorting sequence is (all one line):
+>
+	'[\/]$,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,
+	\.swp$,\.bak$,\~$'
+<
+The lone * is where all filenames not covered by one of the other patterns
+will end up.  One may change the sorting sequence by modifying the
+g:netrw_sort_sequence variable (either manually or in your <.vimrc>) or by
+using the "S" map.
+
+Related topics:               |netrw-s|               |netrw-S|
+Associated setting variables: |g:netrw_sort_sequence| |g:netrw_sort_options|
+
+
+GOING UP							*netrw--* {{{2
+
+To go up a directory, press "-" or press the <cr> when atop the ../ directory
+entry in the listing.
+
+Netrw will use the command in |g:netrw_list_cmd| to perform the directory
+listing operation after changing HOSTNAME to the host specified by the
+user-provided url.  By default netrw provides the command as:
+
+	ssh HOSTNAME ls -FLa
+
+where the HOSTNAME becomes the [user@]hostname as requested by the attempt to
+read.  Naturally, the user may override this command with whatever is
+preferred.  The NetList function which implements remote browsing
+expects that directories will be flagged by a trailing slash.
+
+
+HIDING FILES OR DIRECTORIES			*netrw-a* *netrw-hiding* {{{2
+
+Netrw's browsing facility allows one to use the hiding list in one of three
+ways: ignore it, hide files which match, and show only those files which
+match.
+
+If no files have been marked via |netrw-mf|:
+
+The "a" map allows the user to cycle through the three hiding modes.
+
+The |g:netrw_list_hide| variable holds a comma delimited list of patterns
+based on regular expressions (ex. ^.*\.obj$,^\.) which specify the hiding list.
+(also see |netrw-ctrl-h|)  To set the hiding list, use the <c-h> map.  As an
+example, to hide files which begin with a ".", one may use the <c-h> map to
+set the hiding list to '^\..*' (or one may put let g:netrw_list_hide= '^\..*'
+in one's <.vimrc>).  One may then use the "a" key to show all files, hide
+matching files, or to show only the matching files.
+
+	Example: \.[ch]$
+		This hiding list command will hide/show all *.c and *.h files.
+
+	Example: \.c$,\.h$
+		This hiding list command will also hide/show all *.c and *.h
+		files.
+
+Don't forget to use the "a" map to select the mode (normal/hiding/show) you
+want!
+
+If files have been marked using |netrw-mf|, then this command will:
+
+  if showing all files or non-hidden files:
+   modify the g:netrw_list_hide list by appending the marked files to it
+   and showing only non-hidden files.
+
+  else if showing hidden files only:
+   modify the g:netrw_list_hide list by removing the marked files from it
+   and showing only non-hidden files.
+  endif
+
+					*netrw-gh* *netrw-hide*
+As a quick shortcut, one may press >
+	gh
+to toggle between hiding files which begin with a period (dot) and not hiding
+them.
+
+Associated setting variable: |g:netrw_list_hide|
+Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|
+
+IMPROVING BROWSING			*netrw-listhack* *netrw-ssh-hack* {{{2
+
+Especially with the remote directory browser, constantly entering the password
+is tedious.
+
+For Linux/Unix systems, the book "Linux Server Hacks - 100 industrial strength
+tips & tools" by Rob Flickenger (O'Reilly, ISBN 0-596-00461-3) gives a tip
+for setting up no-password ssh and scp and discusses associated security
+issues.  It used to be available at http://hacks.oreilly.com/pub/h/66 ,
+but apparently that address is now being redirected to some "hackzine".
+I'll attempt a summary based on that article and on a communication from
+Ben Schmidt:
+
+	1. Generate a public/private key pair on the local machine
+	   (ssh client): >
+		ssh-keygen -t rsa
+		(saving the file in ~/.ssh/id_rsa as prompted)
+<
+	2. Just hit the <CR> when asked for passphrase (twice) for no
+	   passphrase.  If you do use a passphrase, you will also need to use
+	   ssh-agent so you only have to type the passphrase once per session.
+	   If you don't use a passphrase, simply logging onto your local
+	   computer or getting access to the keyfile in any way will suffice
+	   to access any ssh servers which have that key authorized for login.
+
+	3. This creates two files: >
+		~/.ssh/id_rsa
+		~/.ssh/id_rsa.pub
+<
+	4. On the target machine (ssh server): >
+		cd
+		mkdir -p .ssh
+		chmod 0700 .ssh
+<
+	5. On your local machine (ssh client): (one line) >
+		ssh {serverhostname}
+		  cat '>>' '~/.ssh/authorized_keys2' < ~/.ssh/id_rsa.pub
+<
+	   or, for OpenSSH, (one line) >
+		ssh {serverhostname}
+		  cat '>>' '~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub
+<
+You can test it out with >
+	ssh {serverhostname}
+and you should be log onto the server machine without further need to type
+anything.
+
+If you decided to use a passphrase, do: >
+	ssh-agent $SHELL
+	ssh-add
+	ssh {serverhostname}
+You will be prompted for your key passphrase when you use ssh-add, but not
+subsequently when you use ssh.  For use with vim, you can use >
+	ssh-agent vim
+and, when next within vim, use >
+	:!ssh-add
+Alternatively, you can apply ssh-agent to the terminal you're planning on
+running vim in: >
+	ssh-agent xterm &
+and do ssh-add whenever you need.
+
+For Windows, folks on the vim mailing list have mentioned that Pageant helps
+with avoiding the constant need to enter the password.
+
+Kingston Fung wrote about another way to avoid constantly needing to enter
+passwords:
+
+    In order to avoid the need to type in the password for scp each time, you
+    provide a hack in the docs to set up a non password ssh account. I found a
+    better way to do that: I can use a regular ssh account which uses a
+    password to access the material without the need to key-in the password
+    each time. It's good for security and convenience. I tried ssh public key
+    authorization + ssh-agent, implementing this, and it works! Here are two
+    links with instructions:
+
+    http://www.ibm.com/developerworks/library/l-keyc2/
+    http://sial.org/howto/openssh/publickey-auth/
+
+
+LISTING BOOKMARKS AND HISTORY		*netrw-qb* *netrw-listbookmark* {{{2
+
+Pressing "qb" (query bookmarks) will list the bookmarked directories and
+directory traversal history (query).
+
+(see |netrw-mb|, |netrw-gb|, |netrw-u|, and |netrw-U|)
+
+
+MAKING A NEW DIRECTORY					*netrw-d* {{{2
+
+With the "d" map one may make a new directory either remotely (which depends
+on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
+global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
+directory's name.  A bare <CR> at that point will abort the making of the
+directory.  Attempts to make a local directory that already exists (as either
+a file or a directory) will be detected, reported on, and ignored.
+
+Currently, making a directory via ftp is not supported.
+
+Associated setting variable: |g:netrw_local_mkdir| |g:netrw_mkdir_cmd|
+
+
+MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* {{{2
+
+By default, |g:netrw_keepdir| is 1.  This setting means that the current
+directory will not track the browsing directory.
+
+Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
+track netrw's browsing directory.
+
+However, given the default setting for g:netrw_keepdir of 1 where netrw
+maintains its own separate notion of the current directory, in order to make
+the two directories the same, use the "c" map (just type c).  That map will
+set Vim's notion of the current directory to netrw's current browsing
+directory.
+
+Associated setting variable: |g:netrw_keepdir|
+
+MARKING FILES							*netrw-mf* {{{2
+	(also see |netrw-mr|)
+
+One may mark files with the cursor atop a filename and then pressing "mf".
+With gvim, one may also mark files with <s-leftmouse>.  The following netrw
+maps make use of marked files:
+
+    |netrw-a|	Hide marked files/directories
+    |netrw-D|	Delete marked files/directories
+    |netrw-mc|	Copy marked files to target
+    |netrw-md|	Apply vimdiff to marked files
+    |netrw-me|	Edit marked files
+    |netrw-mg|	Apply vimgrep to marked files
+    |netrw-mm|	Move marked files
+    |netrw-mp|	Print marked files
+    |netrw-mt|	Set target for |netrw-mm| and |netrw-mc|
+    |netrw-mT|	Generate tags using marked files
+    |netrw-mx|	Apply shell command to marked files
+    |netrw-mz|	Compress/Decompress marked files
+    |netrw-O|	Obtain marked files
+    |netrw-R|	Rename marked files
+
+One may unmark files one at a time the same way one marks them; ie. place
+the cursor atop a marked file and press "mf".  This process also works
+with <s-leftmouse> using gvim.  One may unmark all files by pressing
+"mu" (see |netrw-mu|).
+
+*markfilelist* *global_markfilelist* *local_markfilelist*
+All marked files are entered onto the global marked file list; there is only
+one such list.  In addition, every netrw buffer also has its own local marked
+file list; since netrw buffers are associated with specific directories, this
+means that each directory has its own local marked file list.  The various
+commands which operate on marked files use one or the other of the marked file
+lists.
+
+
+MARKING FILES BY REGULAR EXPRESSION				*netrw-mr* {{{2
+	(also see |netrw-mf|)
+
+One may also mark files by pressing "mr"; netrw will then issue a prompt,
+"Enter regexp: ".  You may then enter a regular expression such as \.c$ .
+All files in the current directory will then be marked.  Note that the
+regular expressions are vim-style |regexp| ones, not shell ones.  So
+entering *.c probably isn't what you want!
+
+
+MARKED FILES: ARBITRARY COMMAND				*netrw-mx* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the local marked-file list)
+
+Upon activation of the "mx" map, netrw will query the user for some (external)
+command to be applied to all marked files.  All "%"s in the command will be
+substituted with the name of each marked file in turn.  If no "%"s are in the
+command, then the command will be followed by a space and a marked filename.
+
+
+MARKED FILES: COMPRESSION AND DECOMPRESSION		*netrw-mz* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the local marked file list)
+
+If any marked files are compressed,   then "mz" will decompress them.
+If any marked files are decompressed, then "mz" will compress them
+using the command specified by |g:netrw_compress|; by default,
+that's "gzip".
+
+For decompression, netrw provides a |Dictionary| of suffices and their
+associated decompressing utilities; see |g:netrw_decompress|.
+
+Associated setting variables: |g:netrw_compress| |g:netrw_decompress|
+
+MARKED FILES: COPYING						*netrw-mc* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (Uses the global marked file list)
+
+Select a target directory with mt (|netrw-mt|).  Then change directory,
+select file(s) (see |netrw-mf|), and press "mc".
+
+Associated setting variable: |g:netrw_localcopycmd| |g:netrw_ssh_cmd|
+
+MARKED FILES: DIFF						*netrw-md* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the global marked file list)
+
+Use |vimdiff| to visualize difference between selected files (two or
+three may be selected for this).  Uses the global marked file list.
+
+MARKED FILES: EDITING						*netrw-me* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the global marked file list)
+
+This command will place the marked files on the |arglist| and commence
+editing them.  One may return the to explorer window with |:Rexplore|.
+
+MARKED FILES: GREP						*netrw-mg* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the global marked file list)
+
+This command will apply |:vimgrep| to the marked files.  The command will ask
+for the requested pattern; one may enter: >
+	/pattern/[g][j]
+	! /pattern/[g][j]
+	pattern
+<
+MARKED FILES: HIDING AND UNHIDING BY SUFFIX			*netrw-mh* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the local marked file list)
+
+This command extracts the suffices of the marked files and toggles their
+presence on the hiding list.  Please note that marking the same suffix
+this way multiple times will result in the suffix's presence being toggled
+for each file (so an even quantity of marked files having the same suffix
+is the same as not having bothered to select them at all).
+
+Related topics: |netrw-a| |g:netrw_list_hide|
+
+MARKED FILES: MOVING						*netrw-mm* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the global marked file list)
+
+	WARNING: moving files is more dangerous than copying them.
+	A file being moved is first copied and then deleted; if the
+	copy operation fails and the delete succeeds, you will lose
+	the file.  Either try things out with unimportant files
+	first or do the copy and then delete yourself using mc and D.
+	Use at your own risk!
+
+Select a target directory with mT (|netrw-mt|).  Then change directory,
+select file(s) (see |netrw-mf|), and press "mm".
+
+Associated setting variable: |g:netrw_localmovecmd| |g:netrw_ssh_cmd|
+
+MARKED FILES: PRINTING						*netrw-mp* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the local marked file list)
+
+Netrw will apply the |:hardcopy| command to marked files.  What it does
+is open each file in a one-line window, execute hardcopy, then close the
+one-line window.
+
+
+MARKED FILES: SOURCING						*netrw-ms* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the local marked file list)
+
+Netrw will source the marked files (using vim's |:source| command)
+
+
+MARKED FILES: TAGGING						*netrw-mT* {{{2
+	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+		      (uses the global marked file list)
+
+The "mt" mapping will apply the command in |g:netrw_ctags| (by default, its
+"ctags") to marked files.  For remote browsing, in order to create a tags file
+netrw will use ssh (see |g:netrw_ssh_cmd|), and so ssh must be available for
+this to work on remote systems.  For your local system, see |ctags| on how to
+get a version.  I myself use hdrtags, currently available at
+http://mysite.verizon.net/astronaut/src/index.html , and have >
+
+	let g:netrw_ctags= "hdrtag"
+<
+in my <.vimrc>.
+
+When a remote set of files are tagged, the resulting tags file is "obtained";
+ie. a copy is transferred to the local system's directory.  The local tags
+file is then modified so that one may use it through the network.  The
+modification is concerns the names of the files in the tags; each filename is
+preceded by the netrw-compatible url used to obtain it.  When one subsequently
+uses one of the go to tag actions (|tags|), the url will be used by netrw to
+edit the desired file and go to the tag.
+
+Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|
+
+
+MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
+     (See |netrw-mf| and |netrw-mr| for how to mark files)
+
+Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
+
+  * if the cursor is atop a file name, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+
+  * also, if the cursor is in the banner, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+
+  * however, if the cursor is atop a directory name, then that directory is
+    used for the copy/move-to target
+
+There is only one copy/move-to target per vim session; ie. the target is a
+script variable (see |s:var|) and is shared between all netrw windows (in an
+instance of vim).
+
+MARKED FILES: UNMARKING						*netrw-mu* {{{2
+     (See |netrw-mf| and |netrw-mr| for how to mark files)
+
+The "mu" mapping will unmark all currently marked files.
+
+
+NETRW BROWSER VARIABLES		*netrw-browser-options* *netrw-browser-var* {{{2
+
+(if you're interestd in the netrw file transfer settings, see |netrw-options|)
+
+The <netrw.vim> browser provides settings in the form of variables which
+you may modify; by placing these settings in your <.vimrc>, you may customize
+your browsing preferences.  (see also: |netrw-settings|)
+>
+   ---				-----------
+   Var				Explanation
+   ---				-----------
+< *g:netrw_alto*		change from above splitting to below splitting
+				by setting this variable (see |netrw-o|)
+				 default: =&sb           (see |'sb'|)
+
+  *g:netrw_altv*		change from left splitting to right splitting
+				by setting this variable (see |netrw-v|)
+				 default: =&spr          (see |'spr'|)
+
+  *g:netrw_browse_split*	when browsing, <cr> will open the file by:
+				=0: re-using the same window
+				=1: horizontally splitting the window first  
+				=2: vertically   splitting the window first  
+				=3: open file in new tab
+				=4: act like "P" (ie. open previous window)
+
+  *g:netrw_browsex_viewer*	specify user's preference for a viewer: >
+					"kfmclient exec"
+					"gnome-open"
+<				If >
+					"-"
+<				is used, then netrwFileHandler() will look for
+				a script/function to handle the given
+				extension.  (see |netrw_filehandler|).
+
+  *g:netrw_compress*		="gzip"
+				    Will compress marked files with this
+				    command
+
+  *g:netrw_ctags*		="ctags"
+				The default external program used to create tags
+
+  *g:netrw_cursorline*		= 1 (default)
+				will use the |'cursorline'| local setting when
+				|g:netrw_liststyle| ==0 (thin listing) or
+				|g:netrw_liststyle| ==1 (long listing) or
+				|g:netrw_liststyle| ==3 (tree listing)
+				=0: off
+				=2: like ==1, but the wide listing gets both
+				cursorline and |'cursorcolumn'|locally set
+				(ie. doesn't affect the wide listing)
+
+  *g:netrw_decompress*		= { ".gz" : "gunzip" ,
+				    ".bz2" : "bunzip2" ,
+				    ".zip" : "unzip" ,
+				    ".tar" : "tar -xf"}
+				  A dictionary mapping suffices to
+				  decompression programs.
+
+  *g:netrw_fastbrowse*		=0: slow speed directory browsing;
+				    never re-uses directory listings,
+				    always obtains directory listings.
+				=1: medium speed directory browsing;
+				    re-use directory listings only
+				    when remote directory browsing.
+				    (default value)
+				=2: fast directory browsing;
+				    only obtains directory listings when the
+				    directory hasn't been seen before
+				    (or |netrw-ctrl-l| is used).
+
+				Fast browsing retains old directory listing
+				buffers so that they don't need to be
+				re-acquired.  This feature is especially
+				important for remote browsing.  However, if
+				a file is introduced or deleted into or from
+				such directories, the old directory buffer
+				becomes out-of-date.  One may always refresh
+				such a directory listing with |netrw-ctrl-l|.
+				This option gives the user the choice of
+				trading off accuracy (ie. up-to-date listing)
+				versus speed.
+
+  *g:netrw_fname_escape*	=' ?&;%'
+  				Used on filenames before remote reading/writing
+
+  *g:netrw_ftp_browse_reject*	ftp can produce a number of errors and warnings
+				that can show up as "directories" and "files"
+				in the listing.  This pattern is used to
+				remove such embedded messages.  By default its
+				value is:
+				 '^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$'
+
+  *g:netrw_ftp_list_cmd*	options for passing along to ftp for directory
+				listing.  Defaults:
+				 unix or g:netrw_cygwin set: : "ls -lF"
+				 otherwise                     "dir"
+
+
+  *g:netrw_ftp_sizelist_cmd*	options for passing along to ftp for directory
+				listing, sorted by size of file.
+				Defaults:
+				 unix or g:netrw_cygwin set: : "ls -slF"
+				 otherwise                     "dir"
+
+  *g:netrw_ftp_timelist_cmd*	options for passing along to ftp for directory
+				listing, sorted by time of last modification.
+				Defaults:
+				 unix or g:netrw_cygwin set: : "ls -tlF"
+				 otherwise                     "dir"
+
+  *g:netrw_glob_escape*		='[]*?`{~$'
+  				These characters in directory names are
+				escaped before applying glob()
+
+  *g:netrw_hide*		if true, the hiding list is used
+				 default: =0
+
+  *g:netrw_keepdir*		=1 (default) keep current directory immune from
+				   the browsing directory.
+				=0 keep the current directory the same as the
+				   browsing directory.
+				The current browsing directory is contained in
+				b:netrw_curdir (also see |netrw-c|)
+
+  *g:netrw_list_cmd*		command for listing remote directories
+				 default: (if ssh is executable)
+				          "ssh HOSTNAME ls -FLa"
+
+  *g:netrw_liststyle*		Set the default listing style:
+                                = 0: thin listing (one file per line)
+                                = 1: long listing (one file per line with time
+				     stamp information and file size)
+				= 2: wide listing (multiple files in columns)
+				= 3: tree style listing
+  *g:netrw_list_hide*		comma separated pattern list for hiding files
+				Patterns are regular expressions (see |regexp|)
+				Example: let g:netrw_list_hide= '.*\.swp$'
+				 default: ""
+
+  *g:netrw_localcopycmd*	="cp" Linux/Unix/MacOS/Cygwin
+  				="copy" Windows
+				Copies marked files (|netrw-mf|) to target
+				directory (|netrw-mt|, |netrw-mc|)
+
+  *g:netrw_localmovecmd*	="mv" Linux/Unix/MacOS/Cygwin
+  				="move" Windows
+				Moves marked files (|netrw-mf|) to target
+				directory (|netrw-mt|, |netrw-mm|)
+
+  *g:netrw_local_mkdir*		command for making a local directory
+				 default: "mkdir"
+
+  *g:netrw_local_rmdir*		remove directory command (rmdir)
+				 default: "rmdir"
+
+  *g:netrw_maxfilenamelen*	=32 by default, selected so as to make long
+				    listings fit on 80 column displays.
+				If your screen is wider, and you have file
+				or directory names longer than 32 bytes,
+				you may set this option to keep listings
+				columnar.
+
+  *g:netrw_mkdir_cmd*		command for making a remote directory
+				 default: "ssh USEPORT HOSTNAME mkdir"
+
+  *g:netrw_retmap*		if it exists and is set to one, then
+				<2-leftmouse> will be mapped for easy
+				return to the netrw browser window.
+				(example: click once to select and open
+				a file, double-click to return)
+				  default: =0
+
+  *g:netrw_rm_cmd*		command for removing files
+				 default: "ssh USEPORT HOSTNAME rm"
+
+  *g:netrw_rmdir_cmd*		command for removing directories
+				 default: "ssh USEPORT HOSTNAME rmdir"
+
+  *g:netrw_rmf_cmd*		 command for removing softlinks
+				 default: "ssh USEPORT HOSTNAME rm -f"
+
+  *g:netrw_sort_by*		sort by "name", "time", or "size"
+				 default: "name"
+
+  *g:netrw_sort_direction*	sorting direction: "normal" or "reverse"
+				 default: "normal"
+
+  *g:netrw_sort_options*	sorting is done using |:sort|; this
+				variable's value is appended to the
+				sort command.  Thus one may ignore case,
+				for example, with the following in your
+				.vimrc: >
+					let g:netrw_sort_options="i"
+<				 default: ""
+
+  *g:netrw_sort_sequence*	when sorting by name, first sort by the
+				comma-separated pattern sequence
+				 default: '[\/]$,*,\.bak$,\.o$,\.h$,
+				           \.info$,\.swp$,\.obj$'
+
+  *g:netrw_special_syntax*	If true, then certain files will be shown
+  				in special syntax in the browser:
+
+					netrwBak     : *.bak
+					netrwCompress: *.gz *.bz2 *.Z *.zip
+					netrwData    : *.dat
+					netrwHdr     : *.h
+					netrwLib     : *.a *.so *.lib *.dll
+					netrwMakefile: [mM]akefile *.mak
+					netrwObj     : *.o *.obj
+					netrwTags    : tags ANmenu ANtags
+					netrwTilde   : *~ 
+					netrwTmp     : tmp* *tmp
+
+				These syntax highlighting groups are linked
+				to Folded or DiffChange by default
+				(see |hl-Folded| and |hl-DiffChange|), but
+				one may put lines like >
+					hi link netrwCompress Visual
+<				into one's <.vimrc> to use one's own
+				preferences.
+
+  *g:netrw_ssh_cmd*		One may specify an executable command
+				to use instead of ssh for remote actions
+				such as listing, file removal, etc.
+				 default: ssh
+
+  *g:netrw_ssh_browse_reject*	ssh can sometimes produce unwanted lines,
+				messages, banners, and whatnot that one doesn't
+				want masquerading as "directories" and "files".
+				Use this pattern to remove such embedded
+				messages.  By default its value is:
+					 '^total\s\+\d\+$'
+
+
+  *g:netrw_tmpfile_escape*	=' &;'
+  				escape() is applied to all temporary files
+				to escape these characters.
+
+  *g:netrw_timefmt*		specify format string to vim's strftime().
+				The default, "%c", is "the preferred date
+				and time representation for the current
+				locale" according to my manpage entry for
+				strftime(); however, not all are satisfied
+				with it.  Some alternatives:
+				 "%a %d %b %Y %T",
+				 " %a %Y-%m-%d  %I-%M-%S %p"
+				 default: "%c"
+
+  *g:netrw_use_noswf*		netrw normally avoids writing swapfiles
+  				for browser buffers.  However, under some
+				systems this apparently is causing nasty
+				ml_get errors to appear; if you're getting
+				ml_get errors, try putting
+				  let g:netrw_use_noswf= 0
+				in your .vimrc.
+
+  *g:netrw_winsize*		specify initial size of new windows made with
+				"o" (see |netrw-o|), "v" (see |netrw-v|),
+				|:Hexplore| or |:Vexplore|.
+				 default: ""
+
+  *g:netrw_xstrlen*		Controls how netrw computes a string
+  				including multi-byte characters' string
+				length. (thanks to N Weibull, T Mechelynck)
+				=0: uses Vim's built-in strlen()
+				=1: number of codepoints (Latin + a combining
+				    circumflex is two codepoints)  (DEFAULT)
+				=2: number of spacing codepoints (Latin a +
+				    combining circumflex is one spacing 
+				    codepoint; a hard tab is one; wide and
+				    narrow CJK are one each; etc.)
+				=3: virtual length (counting tabs as anything
+				    between 1 and |'tabstop'|, wide CJJK as 2
+				    rather than 1, Arabic alif as zero when
+				    immediately preceded by lam, one
+				    otherwise, etc)
+
+  *g:NetrwTopLvlMenu*		This variable specifies the top level
+				menu name; by default, it's "Netrw.".  If
+				you wish to change this, do so in your
+				.vimrc.
+
+NETRW BROWSING AND OPTION INCOMPATIBILITIES	*netrw-incompatible* {{{2
+
+Netrw has been designed to handle user options by saving them, setting the
+options to something that's compatible with netrw's needs, and then restoring
+them.  However, the autochdir option: >
+	:set acd
+is problematical.  Autochdir sets the current directory to that containing the
+file you edit; this apparently also applies to directories.  In other words,
+autochdir sets the current directory to that containing the "file" (even if
+that "file" is itself a directory).
+
+NETRW SETTINGS						*netrw-settings* {{{2
+
+With the NetrwSettings.vim plugin, >
+	:NetrwSettings
+will bring up a window with the many variables that netrw uses for its
+settings.  You may change any of their values; when you save the file, the
+settings therein will be used.  One may also press "?" on any of the lines for
+help on what each of the variables do.
+
+(also see: |netrw-browser-var| |netrw-protocol| |netrw-var| |netrw-variables|)
+
+
+==============================================================================
+OBTAINING A FILE					*netrw-O* {{{2
+
+If there are no marked files:
+
+    When browsing a remote directory, one may obtain a file under the cursor
+    (ie.  get a copy on your local machine, but not edit it) by pressing the O
+    key.
+
+If there are marked files:
+
+    The marked files will be obtained (ie. a copy will be transferred to your
+    local machine, but not set up for editing).
+
+Only ftp and scp are supported for this operation (but since these two are
+available for browsing, that shouldn't be a problem).  The status bar will
+then show, on its right hand side, a message like "Obtaining filename".  The
+statusline will be restored after the transfer is complete.
+
+Netrw can also "obtain" a file using the local browser.  Netrw's display
+of a directory is not necessarily the same as Vim's "current directory",
+unless |g:netrw_keepdir| is set to 0 in the user's <.vimrc>.  One may select
+a file using the local browser (by putting the cursor on it) and pressing
+"O" will then "obtain" the file; ie. copy it to Vim's current directory.
+
+Related topics:
+ * To see what the current directory is, use |:pwd|
+ * To make the currently browsed directory the current directory, see |netrw-c|
+ * To automatically make the currently browsed directory the current
+   directory, see |g:netrw_keepdir|.
+
+
+OPEN A NEW FILE IN NETRW'S CURRENT DIRECTORY		*netrw-%*
+
+To open a file in netrw's current directory, press "%".  This map will
+query the user for a new filename; an empty file by that name will be
+placed in the netrw's current directory (ie. b:netrw_curdir).
+
+
+PREVIEW WINDOW				*netrw-p* *netrw-preview* {{{2
+
+One may use a preview window by using the "p" key when the cursor is atop the
+desired filename to be previewed.  The display will then split to show both
+the browser (where the cursor will remain) and the file (see |:pedit|).
+By default, the split will be taken horizontally; one may use vertical
+splitting if one has set |g:netrw_preview| first.
+
+
+PREVIOUS WINDOW				*netrw-P* *netrw-prvwin* {{{2
+
+To edit a file or directory in the previously used (last accessed) window (see
+:he |CTRL-W_p|), press a "P".  If there's only one window, then the one window
+will be horizontally split (above/below splitting is controlled by
+|g:netrw_alto|, and its initial size is controlled by |g:netrw_winsize|).
+
+If there's more than one window, the previous window will be re-used on
+the selected file/directory.  If the previous window's associated buffer
+has been modified, and there's only one window with that buffer, then
+the user will be asked if s/he wishes to save the buffer first (yes,
+no, or cancel).
+
+
+REFRESHING THE LISTING			*netrw-ctrl-l* *netrw-ctrl_l* {{{2
+
+To refresh either a local or remote directory listing, press ctrl-l (<c-l>) or
+hit the <cr> when atop the ./ directory entry in the listing.  One may also
+refresh a local directory by using ":e .".
+
+
+RENAMING FILES OR DIRECTORIES	*netrw-move* *netrw-rename* *netrw-R* {{{2
+
+If there are no marked files: (see |netrw-mf|)
+
+    Renaming/moving files and directories involves moving the cursor to the
+    file/directory to be moved (renamed) and pressing "R".  You will then be
+    queried for where you want the file/directory to be moved.  You may select
+    a range of lines with the "V" command (visual selection), and then
+    pressing "R".
+
+If there are marked files:  (see |netrw-mf|)
+
+    Marked files will be renamed (moved).  You will be queried as above in
+    order to specify where you want the file/directory to be moved.
+
+    WARNING:~
+
+    Note that moving files is a dangerous operation; copies are safer.  That's
+    because a "move" for remote files is actually a copy + delete -- and if
+    the copy fails and the delete does not, you may lose the file.
+
+The g:netrw_rename_cmd variable is used to implement renaming.  By default its
+value is:
+
+	ssh HOSTNAME mv
+
+One may rename a block of files and directories by selecting them with
+the V (|linewise-visual|).
+
+
+REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
+
+One may toggle between normal and reverse sorting order by pressing the
+"r" key.
+
+Related topics:              |netrw-s|
+Associated setting variable: |g:netrw_sort_direction|
+
+
+SELECTING SORTING STYLE			*netrw-s* *netrw-sort* {{{2
+
+One may select the sorting style by name, time, or (file) size.  The "s" map
+allows one to circulate amongst the three choices; the directory listing will
+automatically be refreshed to reflect the selected style.
+
+Related topics:               |netrw-r| |netrw-S|
+Associated setting variables: |g:netrw_sort_by| |g:netrw_sort_sequence|
+
+
+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 95, and my ftp dumps four blank lines at the
+	    end of every read.
+
+		See |netrw-fixup|, and put the following into your
+		<.vimrc> file:
+
+			let g:netrw_win95ftp= 1
+
+								*netrw-p2*
+	P2. I use Windows, and my network browsing with ftp doesn't sort by
+	    time or size!  -or-  The remote system is a Windows server; why
+	    don't I get sorts by time or size?
+
+		Windows' ftp has a minimal support for ls (ie. it doesn't
+		accept sorting options).  It doesn't support the -F which
+		gives an explanatory character (ABC/ for "ABC is a directory").
+		Netrw then uses "dir" to get both its short and long listings.
+		If you think your ftp does support a full-up ls, put the
+		following into your <.vimrc>: >
+
+			let g:netrw_ftp_list_cmd    = "ls -lF"
+			let g:netrw_ftp_timelist_cmd= "ls -tlF"
+			let g:netrw_ftp_sizelist_cmd= "ls -slF"
+<
+		Alternatively, if you have cygwin on your Windows box, put
+		into your <.vimrc>: >
+
+			let g:netrw_cygwin= 1
+<
+		This problem also occurs when the remote system is Windows.
+		In this situation, the various g:netrw_ftp_[time|size]list_cmds
+		are as shown above, but the remote system will not correctly
+		modify its listing behavior.
+
+
+								*netrw-p3*
+	P3. I tried rcp://user@host/ (or protocol other than ftp) and netrw
+	    used ssh!  That wasn't what I asked for...
+
+		Netrw has two methods for browsing remote directories: ssh
+		and ftp.  Unless you specify ftp specifically, ssh is used.
+		When it comes time to do download a file (not just a directory
+		listing), netrw will use the given protocol to do so.
+
+								*netrw-p4*
+	P4. I would like long listings to be the default.
+
+		Put the following statement into your |.vimrc|: >
+
+			let g:netrw_liststyle= 1
+<
+		Check out |netrw-browser-var| for more customizations that
+		you can set.
+
+								*netrw-p5*
+	P5. My times come up oddly in local browsing
+
+		Does your system's strftime() accept the "%c" to yield dates
+		such as "Sun Apr 27 11:49:23 1997"?  If not, do a "man strftime"
+		and find out what option should be used.  Then put it into
+		your |.vimrc|: >
+
+			let g:netrw_timefmt= "%X"  (where X is the option)
+<
+								*netrw-p6*
+	P6. I want my current directory to track my browsing.
+	    How do I do that?
+
+	    Put the following line in your |.vimrc|:
+>
+		let g:netrw_keepdir= 0
+<	
+								*netrw-p7*
+	P7. I use Chinese (or other non-ascii) characters in my filenames, and
+	    netrw (Explore, Sexplore, Hexplore, etc) doesn't display them!
+
+		(taken from an answer provided by Wu Yongwei on the vim
+		mailing list)
+		I now see the problem. You code page is not 936, right? Vim
+		seems only able to open files with names that are valid in the
+		current code page, as are many other applications that do not
+		use the Unicode version of Windows APIs. This is an OS-related
+		issue. You should not have such problems when the system
+		locale uses UTF-8, such as modern Linux distros.
+
+		(...it is one more reason to recommend that people use utf-8!)
+
+								*netrw-p8*
+	P8. I'm getting "ssh is not executable on your system" -- what do I
+	    do?
+
+		(Dudley Fox) Most people I know use putty for windows ssh.  It
+		is a free ssh/telnet application. You can read more about it
+		here:
+
+		http://www.chiark.greenend.org.uk/~sgtatham/putty/ Also:
+
+		(Marlin Unruh) This program also works for me. It's a single
+		executable, so he/she can copy it into the Windows\System32
+		folder and create a shortcut to it. 
+
+		(Dudley Fox) You might also wish to consider plink, as it
+		sounds most similar to what you are looking for. plink is an
+		application in the putty suite.
+
+           http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html#plink
+
+	   	(Vissale Neang) Maybe you can try OpenSSH for windows, which
+		can be obtained from:
+
+		http://sshwindows.sourceforge.net/
+
+		It doesn't need the full Cygwin package. 
+
+		(Antoine Mechelynck) For individual Unix-like programs needed
+		for work in a native-Windows environment, I recommend getting
+		them from the GnuWin32 project on sourceforge if it has them:
+
+		    http://gnuwin32.sourceforge.net/
+
+		Unlike Cygwin, which sets up a Unix-like virtual machine on
+		top of Windows, GnuWin32 is a rewrite of Unix utilities with
+		Windows system calls, and its programs works quite well in the
+		cmd.exe "Dos box". 
+
+		(dave) Download WinSCP and use that to connect to the server.
+		In Preferences > Editors, set gvim as your editor:
+
+			- Click "Add..."
+			- Set External Editor (adjust path as needed, include
+			  the quotes and !.! at the end):
+			    "c:\Program Files\Vim\vim70\gvim.exe" !.!
+			- Check that the filetype in the box below is
+			  {asterisk}.{asterisk} (all files), or whatever types
+			  you want (cec: change {asterisk} to * ; I had to
+			  write it that way because otherwise the helptags
+			  system thinks it's a tag)
+			- Make sure it's at the top of the listbox (click it,
+			  then click "Up" if it's not)
+		If using the Norton Commander style, you just have to hit <F4>
+		to edit a file in a local copy of gvim.
+
+		(Vit Gottwald) How to generate public/private key and save
+		public key it on server: >
+  http://www.tartarus.org/~simon/puttydoc/Chapter8.html#pubkey-gettingready
+			8.3 Getting ready for public key authentication
+<
+		How to use a private key with 'pscp': >
+
+			http://www.tartarus.org/~simon/puttydoc/Chapter5.html
+			5.2.4 Using public key authentication with PSCP 
+<
+		(Ben Schmidt) I find the ssh included with cwRsync is
+		brilliant, and install cwRsync or cwRsyncServer on most
+		Windows systems I come across these days. I guess COPSSH,
+		packed by the same person, is probably even better for use as
+		just ssh on Windows, and probably includes sftp, etc. which I
+		suspect the cwRsync doesn't, though it might
+
+		(cec) To make proper use of these suggestions above, you will
+		need to modify the following user-settable variables in your
+		.vimrc:
+
+		|g:netrw_ssh_cmd| |g:netrw_list_cmd|  |g:netrw_mkdir_cmd|
+		|g:netrw_rm_cmd|  |g:netrw_rmdir_cmd| |g:netrw_rmf_cmd|
+
+		The first one (|g:netrw_ssh_cmd|) is the most important; most
+		of the others will use the string in g:netrw_ssh_cmd by
+		default.
+						*netrw-p9* *netrw-ml_get*
+	P9. I'm browsing, changing directory, and bang!  ml_get errors
+	    appear and I have to kill vim.  Any way around this?
+
+		Normally netrw attempts to avoid writing swapfiles for
+		its temporary directory buffers.  However, on some systems
+		this attempt appears to be causing ml_get errors to
+		appear.  Please try setting |g:netrw_use_noswf| to 0
+		in your <.vimrc>: >
+			let g:netrw_use_noswf= 0
+<
+								*netrw-p10*
+	P10. I'm being pestered with "[something] is a directory" and
+	     "Press ENTER or type command to continue" prompts...
+
+		The "[something] is a directory" prompt is issued by Vim,
+		not by netrw, and there appears to be no way to work around
+		it.  Coupled with the default cmdheight of 1, this message
+		causes the "Press ENTER..." prompt.  So:  read |hit-enter|;
+		I also suggest that you set your |'cmdheight'| to 2 (or more) in
+		your <.vimrc> file.
+
+								*netrw-p11*
+	P11. I want to have two windows; a thin one on the left and my editing
+	     window on the right.  How can I do this?
+
+		* Put the following line in your <.vimrc>:
+			let g:netrw_altv = 1
+		* Edit the current directory:  :e .
+		* Select some file, press v
+		* Resize the windows as you wish (see |CTRL-W_<| and
+		  |CTRL-W_>|).  If you're using gvim, you can drag
+		  the separating bar with your mouse.
+		* When you want a new file, use  ctrl-w h  to go back to the
+		  netrw browser, select a file, then press P  (see |CTRL-W_h|
+		  and |netrw-P|).  If you're using gvim, you can press
+		  <leftmouse> in the browser window and then press the
+		  <middlemouse> to select the file.
+
+==============================================================================
+11. Debugging Netrw Itself				*netrw-debug* {{{1
+
+The <netrw.vim> script is typically available as:
+>
+	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
+	/usr/local/share/vim/vim6x/autoload/netrw.vim
+< -or- >
+	/usr/local/share/vim/vim7x/plugin/netrwPlugin.vim
+	/usr/local/share/vim/vim7x/autoload/netrw.vim
+<
+which is loaded automatically at startup (assuming :set nocp).
+
+	1. Get the <Decho.vim> script, available as:
+
+	     http://mysite.verizon.net/astronaut/vim/index.html#DECHO
+	   or
+	     http://vim.sourceforge.net/scripts/script.php?script_id=120
+
+	  It now comes as a "vimball"; if you're using vim 7.0 or earlier,
+	  you'll need to update vimball, too.  See
+	     http://mysite.verizon.net/astronaut/vim/index.html#VIMBALL
+
+	2. 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.
+
+	   To save the file, use >
+		:wincmd j
+		:set bt=
+		:w! DBG
+<	   Please send that information to <netrw.vim>'s maintainer, >
+		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
+<
+==============================================================================
+12. History						*netrw-history* {{{1
+
+	v133: Aug 10, 2008 * NetReadFixup() for win95 was missing some "a:"s
+	      Aug 12, 2008 * (Jan Minář) an error condition in NetrwMethod()
+			     wasn't being used, resulting in b:netrw_fname
+			     undefined errors
+	      Aug 12, 2008 * (François Ingeirest) asked that "hi link" be
+			     changed to hi default link in the netrw syntax
+			     files.
+	      Aug 12, 2008 * using s:NetrwUnmarkList() more often.  Filenames
+			     were being left on the global list when removed
+			     from the buffer-local lists.
+	      Aug 14, 2008 * (Joshua Clayton) an errant extra ")" was left in
+			     the rcp-handling portion of NetRead().
+	      Sep 03, 2008 * added |'cursorline'| highlighting to thin, long,
+			     and tree displays.
+	v132: Aug 06, 2008 * Fixed marked file-based obtain
+	      Aug 08, 2008 * sourcing a file via ftp from a netrw-generated
+	                     buffer (or any buffer with |'nobl'|) left an
+			     empty no-name buffer in its wake.  Fixed.
+	v130: Jul 31, 2008 * trying out elinks/links for http://host/
+			     requests.  One problem: in-page links
+			     (such as with ...#LABEL) are not supported
+			   * verified that Bram's modified netrwPlugin works
+	      Aug 01, 2008 * fixed a bug: when sourcing a file via ftp, the
+			     "filter window" was left behind.
+	v129: Jul 31, 2008 * bug found in non-mouse enabled vim and some
+			     local maps
+	v128: Jul 30, 2008 * much work done in using shellescape() and
+			     fnameescape()
+	v126: Jun 30, 2008 * after having gone to a remote directory,
+	                     <f1> was no longer taking one to the correct
+			     entry in the help (|netrw-quickhelp|).  Fixed.
+	      Jul 01, 2008 * extracting the last filename from a wide listing
+			     missed the last letter when |'virtualedit'| not
+			     enabled.
+	      Jul 01, 2008 * vim foo/bar  was creating [Scratch] buffers,
+			     where bar was also a directory
+	      Jul 01, 2008 * numerous additional changes were made to netrw
+			     to use fnameescape() and shellescape() instead
+			     of escape().  Not all changes have been tested
+			     as yet...
+	      Jul 01, 2008 * (James Vega reported) some problems with
+			     :NetrwSettings (due to no longer used setting
+			     variables).
+	      Jul 07, 2008 * Additional numerous changes to support security;
+	                     shellescape(arg,1), etc.
+	v125: Apr 07, 2008 * (Cristian Rigamonti) CR provides a patch; he
+			     noted that gx was failing since its call to
+			     netrw#NetBrowseX() wasn't updated to
+			     netrw#NetrwBrowseX().
+			   * (Stanis Trendelenburg) ST provides a patch to
+			     supports davs: (dav + ssl)
+			   * (Rick Choi) noted that directory names comprised
+			     of three digits were not being displayed by
+			     the internal browser.  Fixed.
+			   * (Erik Falor) provided a patch to handle problems
+			     with changing directory and |'acd'| option.
+			   * (James Vega, Teemu Likonen) noted that netrw
+			     wasn't handling multi-byte filenames/directories
+			     correctly.  Fixed.
+			   * (Rick) found problem with g:netrw_maxfilenamelen
+			     being overridden.
+			   * (James Vega) pointed out that netrw was
+			     misidentifying all files in a symbolically linked
+			     directory as being symbolically linked
+			     themselves.  This particular problem was fixed;
+			     however, there are now situations where
+			     symbolically linked files will not be detected.
+			     Really need an internal vim function to do this
+			     identification.
+	      Apr 17, 2008 * When g:netrw_keepdir==0, current directory
+	                     doesn't necessarily equal b:netrw_curdir
+			     initially.  Problem is due to the patch directly
+			     above.
+			   * Fixed qf to handle case where b:netrw_curdir
+			     isn't the same as the current directory under
+			     linux/macosx.
+			   * New: |netrw-mg| (apply vimgrep to marked files)
+	      May 05, 2008 * (Rick) pointed out that a "setlocal ts=32" was
+			     interfering with g:netrw_maxfilenamelen
+	      May 05, 2008 * (James Vega) a file inside a linked directory
+			     was showing up as a symbolic link itself.
+	      May 22, 2008 * symbolic links, fifos, and sockets are now
+	                     indicated by a trailing @, |, or =, respectively.
+	      Jun 06, 2008 * Removed numerous bugs from the marked file
+			     move and copy.  Tested these changes under
+			     Unix only thus far.
+			   * :Rexplore returns to the screen position in the
+			     netrw listing from whence the file was edited
+	v124: Apr 02, 2008 * (Adrian Rollett) change the line supporting the
+			    "x" action for mac to use g:netrw_shq
+	v123: Feb 27, 2008 * Marked files now keeps a "global" marked file
+			     list.  The global marked file list is used to
+			     support tag processing and vimdiff'ing
+			     (|netrw-md| |netrw-mt|)
+			   * Been insuring that mm and mc works with various
+			     combinations of local and remote directories
+			   * (Stefan Bittner) http://.../ should always have
+			     filetype "html" -- fixed.
+			   * (Stefan Bittner) a "?" in a http://.../ request
+			     wasn't being handled correctly.  Fixed by
+			     removing ? from default |g:netrw_tmpfile_escape|.
+			   * (Nico Weber) % codes in http://.../ requests
+			     weren't being handled correctly.  Fixed by
+			     including % in default |g:netrw_fname_escape|.
+			   * (Stefan Bittner) attempts to update Buffers.Refresh
+			     were failing because locale use changed the menu
+			     names.  I implemented a workaround.
+	v122: Feb 12, 2008 * bugfix - first sorting sequence match now has
+			     priority
+	      Feb 14, 2008 * bugfix - sorting sequence was effectively ignoring
+			     sequencing priority of anything following '*'
+			   * toggling a marked file was showing incorrect list
+			     (list was correct, but displayed matches weren't)
+			   * |g:netrw_special_syntax| implemented
+	v121: Feb 11, 2008 * Bram M reported that :e file ... :e . would not
+			     retain the alternate file.  Fixed -- I hope!
+			   * bugfix -- apparently v120 broke an explicit
+			     :Explore dirname
+	v120: Jan 21, 2008 * |netrw-mt| changed to allow for target selection
+	                     based on whether or not word under cursor is a
+			     directory or file, or if cursor is in banner
+			     area.
+			   * |netrw-mh| included (hiding by marked-file suffix)
+			   * functions moved about a bit (improved
+			     categorization)
+			   * executable files now displayed with trailing (*)
+			   * symbolically linked files now displayed with
+			     trailing (@)
+			   * Somewhen, s:NetrwMarkFileMove() got damaged.  Its
+			     now restored (missing an endif, for example).
+			   * |netrw-mu| implemented (unmarking marked files)
+			   * many bugs have been removed from the marked file
+			     system (tnx to Mark S. for feedback)
+			   * |netrw-ms| implemented (sourcing marked files)
+			   * fixed use of P with tree listing style
+			   * multiple tree listing now supported
+			   * ./ suppressed
+			   * changed q -> qb (query bookmarks)
+			   * implemented |netrw-qf|
+			   * Explore now has four special list-generation
+			     modes: */filepat **/filepat
+			           *//pattern **//pattern
+			   * gh (|netrw-gh|) is a shortcut for toggling the
+			     hiding of files and directories beginning with a
+			     dot
+	v119: Jan 10, 2008 * When g:netrw_keepdir is false,
+			     NetrwOptionsRestore() had a problem
+			     (Bill McCarthy)
+	      Jan 11, 2008 * Netrw now shows symbolic links with a trailing
+	                     "@" and special highlighting.
+	      Jan 15, 2008 * Changed g:netrw_noretmap -> |g:netrw_retmap|.
+	                     Changed: disabled by default at Bram's
+			     preference.
+	v118: Jan 02, 2008 * Fixed a problem with Windows;
+			     :Explore c:/path/ would not work,
+			     but :Explore c:/path would.
+			   * Fixed a bug in s:NetrwOptionRestore() - lcd's
+			     argument wasn't being properly escaped so it
+			     wouldn't handle spaces in directory names.
+			     (Gary Johnson)
+	v117: Jan 02, 2008 * Fixed a problem with P; had to include
+			     a b:netrw_curdir bypass (Bram Moolenaar)
+	v116: Nov 27, 2007 * netrw#LocalBrowseCheck() has &ft=="netrw"
+			     check to prevent doing a directory listing
+			     (was getting unexpected directory refreshes
+			     in the middle of some function calls)
+			   * NetrwOptionRestore moved after e! filename
+			     in order to retain user options for editing
+			     in s:NetrwBrowseChgDir()
+	      Dec 12, 2007 * Bug fix -- netrw does a better job of retaining
+	                     user options when editing files under the aegis
+			     of the browser
+	v115: Oct 04, 2007 * Erik Remmelzwaal pointed out that the use of
+			     shellslash in s:GetTempfile() was incorrect
+	      Oct 11, 2007 * Tracked down and eliminated a bug with editing
+			     remote *.tar.gz and *.tar.bz2 files
+	      Oct 11, 2007 * g:netrw_localmovecmd wasn't being initialized
+			     properly, and g:netrw_localcopycmd was being
+			     overwritten.
+	      Oct 12, 2007 * Placed all :Rexplore and <2-leftmouse> setup
+			     in a new support function (s:SetRexDir()).
+	      Oct 15, 2007 * new: g:netrw_browse_split == 4; means <cr>
+			     based selection will use previous window
+	      Oct 20, 2007 * also checks on |'shellxquote'| to set g:netrw_shq
+	      Oct 24, 2007 * Explore handles path/**/filename
+	      Oct 27, 2007 * sourcing remote files often didn't work with ftp,
+	                     turns out that b:netrw_method was undefined, so
+			     s:SaveBufVars and s:RestoreBufVars() fixed it.
+	v114: Sep 28, 2007 * mT, the map that invokes tags, has been improved
+			     to support use of remote tags files.
+	      Oct 02, 2007 * changed Netrw menu to use more submenus
+	v113: Sep 07, 2007 * worked out why the cursor position wasn't being
+			     saved and restored as intended after doing such
+			     things as deleting and renaming files.
+	      Sep 11, 2007 * Fixed bug which effectively disabled <c-l> and
+			     <c-h> maps
+	      Sep 18, 2007 * there used to be one NetrwOptionRestore() call at
+			     the end of the s:NetrwBrowseChgDir() function;
+			     they're now at the end of every if..elseif..else
+			     block.  The edit-a-file one is not quite at the end
+			     of its block; instead, its just before the edit.
+			     Restores user options, then this new placement
+			     allows ftplugins, autocmds, etc to change settings
+			     (ex. ftplugin/cpp.vim sets cindent).
+	      Sep 19, 2007 * changed all strlen() calls to use s:Strlen(), a
+			     function which handles utf-8 wide characters
+			     correctly.
+	      Sep 20, 2007 * (Nico Weber) the "x" command has been extended
+			     to Mac's OS/X (macunix); it now uses open to
+			     handle |netrw-x| browsing with special files.
+	      Sep 22, 2007 * Added g:netrw_noretmap to netrw at Tony M's
+			     request.
+			   * Included path to NetrwRemoteRmFile()
+	v112: Aug 18, 2007 * added mx (|netrw-mx|) for executing arbitrary
+			     commands on marked files
+	      Aug 22, 2007 * more option save/restore work for
+			     s:NetrwBrowseChgDir(); s:NetrwOptionSave()
+			     and s:NetrwOptionRestore() now take a parameter
+			     specifying the type of variables to be used for
+			     saving and restoring (either "w:" or "s:")
+	      Sep 04, 2007 * added the :NetrwClean[!] command
+	v111: Jul 25, 2007 * using Windows but not using Cygwin, netrw does a
+			     "file bufname" where the bufname uses /s
+			     instead of \s; Vim "fixes" it by changing the
+			     bufname to use \s anyway.  This meant that
+			     NetrwGetBuffer() didn't find the appropriately
+			     named buffer, and so would generate a new
+			     buffer listing; hence the cursor would appear
+			     to have been moved when doing a preview.
+			   * added <2-leftmouse> map to return to netrw's
+			     browser display
+	      Aug 16, 2007 * added the mark-file system, including
+			     maps for mf mp mt mz and mu.  Modifications
+			     made to maps for a D O and R to support
+			     marked files.
+	v110: May 10, 2007 * added [ and ] maps to NetrwTreeListing
+	      May 25, 2007 * |g:netrw_preview| included
+	      May 29, 2007 * modifed netrw#NetBrowseX to consistently use
+			     g:netrw_shq instead of hardcoded quotes,
+			     and modified the snippet that sets up redir
+			     so Windows machines use "nul" instead of
+			     "/dev/null".
+	      Jun 01, 2007 * fixed bug -- NetGetBuffer() wasn't always
+			     recognizing a buffer name match when it should,
+			     thus resulting in [Scratch] buffers.
+	      Jun 04, 2007 * Gary Johnson found a bugfix for the "c" mapping
+			     when the directory is to be made current but
+			     the name contains spaces.
+	v109: Mar 26, 2007 * if a directory name includes a "$" character,
+			     Explore() will use expand() in an attempt to
+			     decipher the name.
+	      May 07, 2007 * g:netrw_use_errorwindow now allows one to
+			     have error messages go to a reliable window
+			     or to use a less reliable but recallable 
+			     echoerr method
+	      May 07, 2007 * g:netrw_scpport and g:netrw_sshport support
+			     use of -P and -p, respectively, to set port
+			     for scp/ssh.
+	v108: Jan 03, 2007 * included preview map (|netrw-p|), supporting
+			     remote browsing
+			   * netrw can now source remote files
+	      Jan 26, 2007 * Colton Jamieson noted that remote directory
+			     browsing did not support alternate port
+			     selection.  This feature has now been extended
+			     to apply to all remote browsing commands via ssh.
+			     (list, remove/delete, rename)
+	      Jan 31, 2007 * Luis Florit reported that @* was an invalid
+			     register.  The @* register is now only saved and
+			     restored if |'guioptions'| contains "a".
+	      Feb 02, 2007 * Fixed a bug that cropped up when writing files
+			     via scp using cygwin
+	      Feb 08, 2007 * tree listing mode managed to stop working again;
+			     fixed again!
+	      Feb 15, 2007 * Guido Van Hoecke reported that netrw didn't
+			     handle browsing well with M$ ftp servers.  He even
+			     set up a temporary account for me to test with
+			     (thanks!).  Netrw now can browse M$ ftp servers.
+	v107: Oct 12, 2006 * bypassed the autowrite option
+	      Oct 24, 2006 * handles automatic decompression of *.gz and *.bz2
+			     files
+	      Nov 03, 2006 * Explore will highlight matching files when
+			     **/pattern is used (and if the |'hls'| option
+			     is set)
+	      Nov 09, 2006 * a debugging line, when enabled, was inadvertently
+			     bringing up help instead of simply reporting on
+			     list contents
+	      Nov 21, 2006 * tree listing improved (cursor remains put)
+	      Nov 27, 2006 * fixed b:netrw_curdir bug when repeated "i"s were
+			     pressed.
+	      Dec 15, 2006 * considerable qty of changes, mostly to share more
+			     code between local and remote browsing.  Includes
+			     support for tree-style listing for both remote
+			     and local browsing.
+	      Dec 15, 2006 * Included Peter Bengtsson's modifications to
+			     support the Amiga.
+	v106: Sep 21, 2006 * removed old v:version<700 code as netrw now
+			     requires vim 7.0
+			   * worked around a bug where register * was
+			     overwritten during local browsing
+	v104: Sep 05, 2006 * as suggested by Rodolfo Borges, :Explore and
+			     variants will position the cursor on the file
+			     just having been edited
+			   * changed default |g:netrw_sort_sequence| order
+			   * changed b, Nb to simply mb  (see |netrw-mb|)
+			   * changed B, NB to simply gb  (see |netrw-gb|)
+			   * tree listing style (see |g:netrw_liststyle|)
+			   * attempts to retain the alternate file
+	v103: Jul 26, 2006 * used Yakov Lerner's tip#1289 to improve netrw
+			     error message display
+			   * wide listings didn't handle files with backslashes
+			     in their names properly.  A symptom was an
+			     inability to open files.
+	      Aug 09, 2006 * included "t" mapping for opening tabbed windows,
+			    both for remote and local browsing
+			   * changed netrw_longlist to netrw_liststyle
+	      Aug 15, 2006 * fixed one of the NB maps
+	      Aug 22, 2006 * changed *Explore commands to use -nargs=* instead
+			     of -nargs=?.  Allows both -complete=dir _and_ the
+			     starstar arguments to work (-nargs=? seems to
+			     require one or the other).
+	      Aug 23, 2006 * copied all w:.. variables across splits to
+			     new windows
+	      Aug 25, 2006 * when g:netrw_browsex_viewer was '-'
+			     (see |g:netrw_browsex_viewer|) it wasn't causing
+			     netrwFileHandlers#Invoke() to be called as it
+			     was expected to.  (tnx Steve Dugaro)
+	      Aug 29, 2006 * changed NetBrowseX() to use "setlocal ... noswf"
+			     instead of "set ... noswf"  (tnx Benji Fisher)
+	      Aug 31, 2006 * tabs and fastbrowse<=1 didn't work together.
+	v102: Jun 15, 2006 * chgd netrwPlugin to call netrw#LocalBrowseCheck()
+			   * bugfix: g:netrw_keepdir==0 had stopped working
+	      Jul 06, 2006 * bugfix: NetOptionSave/Restore now saves/restores
+			     the unnamed register (|registers|)
+	      Jul 07, 2006 * |g:netrw_menu| support included
+	      Jul 13, 2006 * :Texplore command implemented
+	      Jul 17, 2006 * NetSplit and (Local|Net)BrowseChgDir() were both
+			     splitting windows.  This affected o, v, and
+			     g:netrw_browse_split.
+	      Jul 20, 2006 * works around wildignore setting (was causing
+			     netrw's local browser not to list wildignore'd
+			     files)
+	      Jul 24, 2006 * <leftmouse> acts as a <cr> for selecting a file
+			     <rightmouse> acts as a <del> for deleting a file
+	v100: May 14, 2006 * when using Windows and shell==cmd.exe, the
+			     default for g:netrw_ignorenetrc is now 1
+			   * bugfix: unwanted ^Ms now removed
+			     (affected shell==cmd.exe - Windows)
+			   * added Bookmarks and History to the menu
+			   * an error message about non-existing
+			     w:netrw_longlist was appearing during attempts to
+			     Explore (fixed)
+			   * g:netrw_shq now available to make netrw use
+			     specified style of quotes for commands
+	     May 29, 2006  * user NFH_*() functions were inadvertently being
+			     ignored
+			   * fixed a Windows non-cygwin ftp handling problem.
+			   * hiding pattern candidate separators included some
+			     characters it shouldn't have (tnx to Osei Poku)
+	     Jun 01, 2006  * for browsing, netrw was supposed to use "dir"
+			     instead of "ls -lF" when using
+			     ftp+non-cygwin+windows.  Fixed.
+			   * an inadvertently left-in-place debugging statement
+			     was preventing use of the "x" key with browsing.
+	     Jun 05, 2006  * g:netrw_nogx available to prevent making the gx
+			     map (see |g:netrw_nogx|)
+			   * bugfix, Explore wouldn't change directory
+			     properly (vim ., :Explore subdirname)
+	     Jun 06, 2006  * moved history to 2nd line in Netrw menu
+			   * fixed delete for unix-based systems
+	     Jun 07, 2006  * x key now works for windows-noncygwin-ftp
+	     Jun 08, 2006  * Explore */pat and **//pat now wraps
+	v99: May 09, 2006  * g:netrw_browse_split=3 for opening files in new
+			     tabs implemented.
+	     May 12, 2006  * deletes temporary file at end of NetRead()
+			   * visual mode based Obtain implemented
+			   * added -complete=dir to the various Explore
+			     commands
+	v98: May 02, 2006  * the "p" key didn't work properly when the browsing
+			     directory name had spaces in it.
+	v97: May 01, 2006  * exists("&acd") now used to determine if
+			     the 'acd' option exists
+			   * "obtain" now works again under Windows
+	v96:		   * bugfix - the |'acd'| option is not always defined
+			     but is now bypassed only when it is
+	v95:		   * bugfix - Hiding mode worked correctly (don't show
+			     any file matching any of the g:netrw_hide
+			     patterns), but showing mode was showing only those
+			     files that didn't match any of the g:netrw_hide
+			     patterns.  Instead, it now shows all files that
+			     match any of the g:netrw_hide patterns (the
+			     difference between a logical and and logical or).
+	v94:		   * bugfix - a Decho() had a missing quote; only
+			     affects things when debugging was enabled.
+	v93:		   * bugfix - removed FocusGained event from causing a
+			     slow-browser refresh for Windows
+	v92:		   * :Explore **//pattern implemented
+			      (**/filepattern was already taken)
+	v91:		   * :Explore */pattern implemented
+			   * |'acd'| option bypassed
+	v90:		   * mark ', as suggested by Yegappan Lakshmanan, used
+			     to help guarantee entry into the jump list when
+			     appropriate.
+			   * <s-down> and <s-up> are no longer defined until a
+			     :Explore **/pattern  is used (if the user already
+			     has a map for them).  They will be defined for new
+			     browser windows from that point forward.
+	v89:		   * A <s-down>, <s-up>, :Nexplore, or a :Pexplore
+			     without having first done an :Explore **/pattern
+			     (see |netrw-starstar|) caused
+			     a lot of unhelpful error messages to appear
+	v88:		   * moved DrChip.Netrw menu to Netrw.  Now has
+			     priority 80 by default.
+			     g:NetrwTopLvlMenu == "Netrw" and can be changed
+			     by the user to suit.  The priority is given by
+			     g:NetrwMenuPriority.
+			   * Changed filetype for browser displays from
+			     netrwlist to netrw.
+	v87:		   * bug fix -- menus were partially disappearing
+	v85:		   * bug fix -- missing an endif
+			   * bug fix -- handles spaces in names and directories
+			     when using ftp-based browsing
+	v83:		   * disabled stop-acd handling; the change in directory
+			     handling may allow acd to be used again.
+			   * D was refusing to delete remote files/directories
+			     in wide listing mode.
+	v81:		   * FocusGained also used to refresh/wipe local browser
+			     directory buffers
+			   * (bugfix) netrw was leaving [Scratch] buffers behind
+			     when the user had the "hidden" option set.  The
+			     'hidden' option is now bypassed.
+	v80:		   * ShellCmdPost event used in conjunction with
+			     g:netrw_fastbrowse to refresh/wipe local browser
+			     directory buffers.
+	v79:		   * directories are now displayed with nowrap
+			   * (bugfix) if the column width was smaller than the
+			     largest file's name, then netrw would hang when
+			     using wide-listing mode - fixed
+			   * g:netrw_fastbrowse introduced
+	v78:		   * progress has been made on allowing spaces inside
+			     directory names for remote work (reading, writing,
+			     browsing).  (scp)
+	v77:		   * Mikolaj Machowski fixed a bug in a substitute cmd
+			   * g:netrw_browsex_viewer implemented
+			   * Mikolaj Machowski pointed out that gnome-open is
+			     often executable under KDE systems, although it is
+			     effectively not functional.  NetBrowseX now looks
+			     for "kicker" as a running process to determine if
+			     KDE is actually running.
+			   * Explorer's O functionality was inadvertently left
+			     out.  Netrw now does the same thing, but with the
+			     "P" key.
+			   * added g:netrw_browse_split option
+			   * fixed a bug where the directory contained a "." but
+			     the file didn't (was treating the dirname from "."
+			     onwards as a suffix)
+	v76:		   * "directory is missing" error message now restores
+			      echo highlighting
+	v75:		   * file://... now conforms to RFC2396 (thanks to
+			     S. Zacchiroli)
+			   * if the binary option is set, then NetWrite() will
+			     only write the whole file (line numbers don't make
+			     sense with this).  Supports writing of tar and zip
+			     files.
+	v74:		   * bugfix (vim, then :Explore) now works
+			   * ctrl-L keeps cursor at same screen location (both
+			     local and remote browsing)
+			   * netrw now can read remote zip and tar files
+			   * Obtain now uses WinXP ftp+.netrc successfully
+	v73:		   * bugfix -- scp://host/path/file was getting named
+			     incorrectly
+			   * netrw detects use of earlier-than-7.0 version of
+			     vim and issues a pertinent error message.
+			   * netrwSettings.vim is now uses autoloading.  Only
+			     <netrwPlugin.vim> is needed as a pure plugin
+			     (ie. always loaded).
+	v72:		   * bugfix -- formerly, one could prevent the loading
+			     of netrw by "let g:loaded_netrw=1"; when
+			     autoloading became supported, this feature was
+			     lost.  It is now restored.
+	v71:		   * bugfix -- made some "set nomodifiable"s into
+			     setlocal variants (allows :e somenewfile  to be
+			     modifiable as usual)
+			   * NetrwSettings calls a netrw function, thereby
+			     assuring that netrw has loaded.  However, if netrw
+			     does not load for whatever reason, then
+			     NetrwSettings will now issue a warning message.
+			   * For what reason I don't recall, when wget and fetch
+			     are both not present, and an attempt to read a
+			     http://... url is made, netrw exited.  It now only
+			     returns.
+			   * When ch=1, on the second and subsequent uses of
+			     browsing Netrw would issue a blank line to clear
+			     the echo'd messages.  This caused an annoying
+			     "Hit-Enter" prompt; now a blank line message
+			     is echo'd only if &ch>1.
+	v70:		   * when using |netrw-O|, the "Obtaining filename"
+			     message is now shown using |hl-User9|.  If User9
+			     has not been defined, netrw itself will define it.
+	v69:		   * Bugfix: win95/98 machines were experiencing a
+			     "E121: Undefined variable: g:netrw_win95ftp"
+			     message
+	v68:		   * double-click-leftmouse selects word under mouse
+	v67:		   * Passwords which contain blanks will now be
+			     surrounded by double-quotes automatically (Yongwei)
+	v66:		   * Netrw now seems to work with a few more Windows
+			     situations
+			   * O now obtains a file: remote browsing
+			     file -> local copy, locally browsing
+			     file -> current directory (see :pwd)
+			   * i now cycles between thin, long, and wide listing
+			     styles
+			   * NB and Nb are maps that are always available;
+			     corresponding B and b maps are only available when
+			     not using wide listing in order to allow them to
+			     be used for motions
+	v65:		   * Browser functions now use NetOptionSave/Restore; in
+			     particular, netrw now works around the report
+			     setting
+	v64:		   * Bugfix - browsing a "/" directory (Unix) yielded
+			     buffers named "[Scratch]" instead of "/"
+			   * Bugfix - remote browsing with ftp was omitting
+			     the ./ and ../
+	v63:		   * netrw now takes advantage of autoload (needs 7.0)
+			   * Bugfix - using r (to reverse sort) working again
+	v62:		   * Bugfix - spaces allowed again in directory names
+			     with g:netrw_keepdir=0.  In fact, I've tested netrw
+			     with most ANSI punctuation marks for directory
+			     names.
+			   * Bugfix - NetrwSettings gave errors when
+			     g:netrw_silent had not be set.
+	v61:		   * Document upgrade -- netrw variable-based settings
+			     all should have tags.  Supports NetrwSettings cmd.
+			   * Several important variables are window-oriented.
+			     Netrw has to transfer these across a window split.
+			     See s:BufWinVars() and s:UseBufWinVars().
+	v60:		   * When using the i map to switch between long and
+			     short listings, netrw will now keep cursor on same
+			     line
+			   * "Match # of #" now uses status line
+			   * :Explore **/*.c  will now work from a
+			     non-netrw-browser window
+			   * :Explore **/patterns can now be run in separate
+			     browser windows
+			   * active banner (hit <cr> will cause various things
+			     to happen)
+	v59:		   * bugfix -- another keepalt work-around installed
+			     (for vim6.3)
+			   * "Match # of #" for Explore **/pattern matches
+	v58:		   * Explore and relatives can now handle
+			     **/somefilepattern (v7)
+			   * Nexplore and Pexplore introduced (v7).  shift-down
+			     and shift-up cursor keys will invoke Nexplore and
+			     Pexplore, respectively.
+			   * bug fixed with o and v
+			   * autochdir only worked around for vim when it has
+			     been compiled with either
+			     |+netbeans_intg| or |+sun_workshop|
+			   * Under Windows, all directories and files were
+			     being preceded with a "/" when local browsing.
+			     Fixed.
+			   * When: syntax highlighting is off, laststatus=2, and
+			     remote browsing is used, sometimes the laststatus
+			     highlighting bleeds into the entire display.  Work
+			     around - do an extra redraw in that case.
+			   * Bugfix: when g:netrw_keepdir=0, due to re-use of
+			     buffers, netrw didn't change the directory when it
+			     should've
+			   * Bugfix: D and R commands work again
+	v57:		   * Explore and relatives can now handle RO files
+			   * reverse sort restored with vim7's sort command
+			   * g:netrw_keepdir now being used to keep the current
+			     directory unchanged as intended (sense change)
+			   * vim 6.3 still supported
+	v56:		   * LocalBrowse now saves autochdir setting, unsets it,
+			     and restores it before returning.
+			   * using vim's rename() instead of system +
+			     local_rename variable
+			   * avoids changing directory when g:netrw_keepdir is
+			     false
+	v55:		   * -bar used with :Explore :Sexplore etc to allow
+			     multiple commands to be separated by |s
+			   * browser listings now use the "nowrap" option
+			   * browser: some unuseful error messages now
+			     suppressed
+	v54:		   * For backwards compatibility, Explore and Sexplore
+			     have been implemented.  In addition, Hexplore and
+			     Vexplore commands are available, too.
+			   * <amatch> used instead of <afile> in the
+			     transparency support (BufReadCmd, FileReadCmd,
+			     FileWriteCmd)
+			   * ***netrw*** prepended to various error messages
+			     netrw may emit
+			   * g:netrw_port used instead of b:netrw_port for scp
+			   * any leading [:#] is removed from port numbers
+	v53:		   * backslashes as well as slashes placed in various
+			     patterns (ex. g:netrw_sort_sequence) to better
+			     support Windows
+	v52:		   * nonumber'ing now set for browsing buffers
+			   * when the hiding list hid all files, error messages
+			     ensued. Fixed
+			   * when browsing, swf is set, but directory is not
+			     set, when netrw was attempting to restore options,
+			     vim wanted to save a swapfile to a local directory
+			     using an url-style path.  Fixed
+	v51:		   * cygwin detection now automated
+			     (using windows and &shell is bash)
+			   * customizable browser "file" rejection patterns
+			   * directory history
+			   * :[range]w url  now supported (ie. netrw uses a
+			     FileWriteCmd event)
+			   * error messages have a "Press <cr> to continue" to
+			     allow them to be seen
+			   * directory browser displays no longer bother the
+			     swapfile
+			   * u/U commands to go up and down the history stack
+			   * history stack may be saved with viminfo with it's
+			     "!" option
+			   * bugfixes associated with unwanted [No Files]
+			     entries
+	v50:		   * directories now displayed using buftype=nofile;
+			     should keep the directory names as-is
+			   * attempts to remove empty "[No File]" buffers
+			     leftover from :file ..name.. commands
+			   * bugfix: a "caps-lock" editing difficulty left in
+			     v49 was fixed
+			   * syntax highlighting for "Showing:" the hiding list
+			     included
+			   * bookmarks can now be retained if "!" is in the
+			     viminfo option
+	v49:		   * will use ftp for http://.../ browsing
+	v48:		   * One may use ftp to do remote host file browsing
+			   * (windows and !cygwin) remote browsing with ftp can
+			     now use the "dir" command internally to provide
+			     listings
+			   * g:netrw_keepdir now allows one to keep the initial
+			     current directory as the current directory
+			     (normally the local file browser makes the
+			     currently viewed directory the current directory)
+			   * g:netrw_alto and g:netrw_altv now support
+			     alternate placement of windows started with o or v
+			   * Nread ? and Nwrite ?  now uses echomsg (instead of
+			     echo) so :messages can repeat showing the help
+			   * bugfix: avoids problems with partial matches of
+			     directory names to prior buffers with longer names
+			   * one can suppress error messages with g:netrw_quiet
+			     ctrl-h used
+			   * instead of <Leader>h for editing hiding list one
+			     may edit the sorting sequence with the S map, which
+			     now allows confirmation of deletion with
+			     [y(es) n(o) a(ll) q(uit)]
+			   * the "x" map now handles special file viewing with:
+			     (windows) rundll32 url.dll (gnome) gnome-open (kde)
+			     kfmclient If none of these are on the executable
+			     path, then netrwFileHandlers.vim is used.
+			   * directory bookmarking during both local and remote
+			     browsing implemented
+			   * one may view all, use the hiding list to suppress,
+			     or use the hiding list to show-only remote and
+			     local file/directory listings
+			   * improved unusual file and directory name handling
+			     preview window support
+	v47:		   * now handles local browsing.
+	v46:		   * now handles remote browsing
+			   * g:netrw_silent (if 1) will cause all transfers to
+			     be silent
+	v45:		   * made the [user@]hostname:path form a bit more
+			     restrictive to better handle errors in using
+			     protocols (e.g. scp:usr@host:file was being
+			     recognized as an rcp request)
+	v44:		   * changed from "rsync -a" to just "rsync"
+			   * somehow an editing error messed up the test to
+			     recognize use of the fetch method for NetRead.
+			   * more debugging statements included
+	v43:		   * moved "Explanation" comments to <pi_netrw.txt> help
+			     file as "Network Reference" (|netrw-ref|)
+			   * <netrw.vim> now uses Dfunc() Decho() and Dret() for
+			     debugging
+			   * removed superfluous NetRestorePosn() calls
+	v42:		   * now does BufReadPre and BufReadPost events on
+			     file:///* and file://localhost/*
+	v41:		   * installed file:///* and file://localhost/* handling
+	v40:		   * prevents redraw when a protocol error occurs so
+			     that the user may see it
+	v39:		   * sftp support
+	v38:		   * Now uses NetRestorePosn() calls with Nread/Nwrite
+			     commands
+			   * Temporary files now removed via bwipe! instead of
+			     bwipe (thanks to Dave Roberts)
+	v37:		   * Claar's modifications which test if ftp is
+			     successful, otherwise give an error message
+			   * After a read, the alternate file was pointing to
+			     the temp file.  The temp file buffer is now wiped
+			     out.
+			   * removed silent from transfer methods so user can
+			     see what's happening
+
+
+==============================================================================
+12. Credits						*netrw-credits* {{{1
+
+	Vim editor	by Bram Moolenaar (Thanks, Bram!)
+	dav		support by C Campbell
+	fetch		support by Bram Moolenaar and C Campbell
+	ftp		support by C Campbell <NdrOchip@ScampbellPfamily.AbizM>
+	http		support by Bram Moolenaar <bram@moolenaar.net>
+	rcp
+	rsync		support by C Campbell (suggested by Erik Warendorph)
+	scp		support by raf <raf@comdyn.com.au>
+	sftp		support by C Campbell
+
+	inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell
+
+	Jérôme Augé		-- also using new buffer method with ftp+.netrc
+	Bram Moolenaar		-- obviously vim itself, :e and v:cmdarg use,
+	                           fetch,...
+	Yasuhiro Matsumoto	-- pointing out undo+0r problem and a solution
+	Erik Warendorph		-- for several suggestions (g:netrw_..._cmd
+				   variables, rsync etc)
+	Doug Claar		-- modifications to test for success with ftp
+	                           operation
+
+==============================================================================
+Modelines: {{{1
+ vim:tw=78:ts=8:ft=help:norl:fdm=marker
diff --git a/vimfiles/doc/pi_vimball.txt b/vimfiles/doc/pi_vimball.txt
index 7a2df7e..c6623ea 100644
--- a/vimfiles/doc/pi_vimball.txt
+++ b/vimfiles/doc/pi_vimball.txt
@@ -1,4 +1,4 @@
-*pi_vimball.txt*	For Vim version 7.1.  Last change: 2008 Apr 01
+*pi_vimball.txt*	For Vim version 7.1.  Last change: 2008 May 30
 
 			       ----------------
 			       Vimball Archiver
@@ -6,7 +6,7 @@
 
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.	*Vimball-copyright*
+Copyright: (c) 2004-2008 by Charles E. Campbell, Jr.	*Vimball-copyright*
 	   The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 	   (see |copyright|) except use "Vimball" instead of "Vim".
 	   No warranty, express or implied.
@@ -16,15 +16,44 @@ Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.	*Vimball-copyright*
 1. Contents				*vba* *vimball* *vimball-contents*
 
 	1. Contents......................................: |vimball-contents|
-	2. Vimball Manual................................: |vimball-manual|
+	3. Vimball Manual................................: |vimball-manual|
 	   MkVimball.....................................: |:MkVimball|
 	   UseVimball....................................: |:UseVimball|
 	   RmVimball.....................................: |:RmVimball|
-	3. Vimball History...............................: |vimball-history|
+	4. Vimball History...............................: |vimball-history|
 
 
 ==============================================================================
-2. Vimball Manual					*vimball-manual*
+2. Vimball Introduction						*vimball-intro*
+
+	Vimball is intended to make life simpler for users of plugins.  All
+	a user needs to do with a vimball is: >
+		vim someplugin.vba
+		:so %
+		:q
+<	and the plugin and all its components will be installed into their
+	appropriate directories.  Note that one doesn't need to be in any
+	particular directory when one does this.  Plus, any help for the
+	plugin will also be automatically installed.
+
+	If a user has decided to use the AsNeeded plugin, vimball is smart
+	enough to put scripts nominally intended for .vim/plugin/ into
+	.vim/AsNeeded/ instead.
+
+	Removing a plugin that was installed with vimball is really easy: >
+		vim
+		:RmVimball someplugin
+<	This operation is not at all easy for zips and tarballs, for example.
+
+	Vimball examines the user's |'runtimepath'| to determine where to put
+	the scripts.  The first directory mentioned on the runtimepath is
+	usually used if possible.  Use >
+		:echo &rtp
+<	to see that directory.
+
+
+==============================================================================
+3. Vimball Manual					*vimball-manual*
 
 							*:MkVimball*
 		:[range]MkVimball[!] filename [path]
@@ -49,6 +78,19 @@ Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.	*Vimball-copyright*
 	If you use the exclamation point (!), then MkVimball will create the
 	"filename.vba" file, overwriting it if it already exists.  This
 	behavior resembles that for |:w|.
+
+							*g:vimball_mkdir*
+	First, the |mkdir()| command is tried (not all systems support it).
+
+	If it doesn't exist, then g:vimball_mkdir doesn't exist, it is set to:
+	  |g:netrw_local_mkdir|, if it exists
+	   "mkdir", if it is executable
+	   "makedir", if it is executable
+	   Otherwise, it is undefined.
+	One may explicitly specify the directory making command using
+	g:vimball_mkdir.  This command is used to make directories that
+	are needed as indicated by the vimball.
+
 							*g:vimball_home*
 	You may override the use of the |'runtimepath'| by specifying a
 	variable, g:vimball_home.
@@ -96,10 +138,19 @@ Copyright: (c) 2004-2007 by Charles E. Campbell, Jr.	*Vimball-copyright*
 
 
 ==============================================================================
-3. Vimball History					*vimball-history* {{{1
+4. Vimball History					*vimball-history* {{{1
 
+	26 : May 27, 2008 * g:vimball_mkdir usage installed.  Makes the
+	                    $HOME/.vim (or $HOME\vimfiles) directory if
+			    necessary.
+	     May 30, 2008 * (tnx to Bill McCarthy) found and fixed a bug:
+			    vimball wasn't updating plugins to AsNeeded/
+			    when it should
 	25 : Mar 24, 2008 * changed vimball#Vimball() to recognize doc/*.??x
 			    files as help files, too.
+	     Apr 18, 2008 * RmVimball command is now protected by saving and
+	                    restoring settings -- in particular, acd was
+			    causing problems as reported by Zhang Shuhan
 	24 : Nov 15, 2007 * |g:vimball_path_escape| used by s:Path() to
 	                    prevent certain characters from causing trouble
 	22 : Mar 21, 2007 * uses setlocal instead of set during BufEnter
diff --git a/vimfiles/doc/tComment.txt b/vimfiles/doc/tComment.txt
index 89542d7..35b66e2 100644
--- a/vimfiles/doc/tComment.txt
+++ b/vimfiles/doc/tComment.txt
@@ -34,7 +34,7 @@ regions in vim scripts, HTML or JavaScript in php code etc.
 Key bindings~
 
 Most of the time the default toggle keys will do what you want (or to be 
-more precise: what I think it should to ;-).
+more precise: what I think you want it to do ;-).
 
                                                     *g:tcommentMapLeaderOp1*
                                                     *g:tcommentMapLeaderOp2*
diff --git a/vimfiles/doc/tags b/vimfiles/doc/tags
index 9fec6f4..51b7257 100644
--- a/vimfiles/doc/tags
+++ b/vimfiles/doc/tags
@@ -30,6 +30,8 @@
 :RM	visincr.txt	/*:RM*
 :Rexplore	pi_netrw.txt	/*:Rexplore*
 :RmVimball	pi_vimball.txt	/*:RmVimball*
+:Search	MultipleSearch.txt	/*:Search*
+:SearchBuffers	MultipleSearch.txt	/*:SearchBuffers*
 :Sexplore	pi_netrw.txt	/*:Sexplore*
 :TComment	tComment.txt	/*:TComment*
 :TCommentAs	tComment.txt	/*:TCommentAs*
@@ -51,6 +53,11 @@ IYMD	visincr.txt	/*IYMD*
 LogiPat()	LogiPat.txt	/*LogiPat()*
 LogiPat-flags	LogiPat.txt	/*LogiPat-flags*
 MatchError	matchit.txt	/*MatchError*
+MultipleSearch	MultipleSearch.txt	/*MultipleSearch*
+MultipleSearch-commands	MultipleSearch.txt	/*MultipleSearch-commands*
+MultipleSearch-mappings	MultipleSearch.txt	/*MultipleSearch-mappings*
+MultipleSearch-settings	MultipleSearch.txt	/*MultipleSearch-settings*
+MultipleSearch.txt	MultipleSearch.txt	/*MultipleSearch.txt*
 Nread	pi_netrw.txt	/*Nread*
 Nsource	pi_netrw.txt	/*Nsource*
 Nwrite	pi_netrw.txt	/*Nwrite*
@@ -1396,6 +1403,7 @@ crvdoc-licLGPL	crefvimdoc.txt	/*crvdoc-licLGPL*
 crvdoc-limbugs	crefvimdoc.txt	/*crvdoc-limbugs*
 crvdoc-usage	crefvimdoc.txt	/*crvdoc-usage*
 dav	pi_netrw.txt	/*dav*
+davs	pi_netrw.txt	/*davs*
 drv-dtArrayInit	crefvim.txt	/*drv-dtArrayInit*
 drv-dtIncompleteArrayDecl	crefvim.txt	/*drv-dtIncompleteArrayDecl*
 ex-visincr-I	visincr.txt	/*ex-visincr-I*
@@ -1409,13 +1417,17 @@ ex-visincr-IYMD	visincr.txt	/*ex-visincr-IYMD*
 fetch	pi_netrw.txt	/*fetch*
 ftp	pi_netrw.txt	/*ftp*
 g%	matchit.txt	/*g%*
+g:MultipleSearchColorSequence	MultipleSearch.txt	/*g:MultipleSearchColorSequence*
+g:MultipleSearchMaxColors	MultipleSearch.txt	/*g:MultipleSearchMaxColors*
+g:MultipleSearchTextColorSequence	MultipleSearch.txt	/*g:MultipleSearchTextColorSequence*
 g:NetrwTopLvlMenu	pi_netrw.txt	/*g:NetrwTopLvlMenu*
 g:netrw_alto	pi_netrw.txt	/*g:netrw_alto*
 g:netrw_altv	pi_netrw.txt	/*g:netrw_altv*
 g:netrw_browse_split	pi_netrw.txt	/*g:netrw_browse_split*
 g:netrw_browsex_viewer	pi_netrw.txt	/*g:netrw_browsex_viewer*
-g:netrw_cd_escape	pi_netrw.txt	/*g:netrw_cd_escape*
 g:netrw_compress	pi_netrw.txt	/*g:netrw_compress*
+g:netrw_ctags	pi_netrw.txt	/*g:netrw_ctags*
+g:netrw_cursorline	pi_netrw.txt	/*g:netrw_cursorline*
 g:netrw_cygwin	pi_netrw.txt	/*g:netrw_cygwin*
 g:netrw_dav_cmd	pi_netrw.txt	/*g:netrw_dav_cmd*
 g:netrw_decompress	pi_netrw.txt	/*g:netrw_decompress*
@@ -1456,10 +1468,10 @@ g:netrw_rsync_cmd	pi_netrw.txt	/*g:netrw_rsync_cmd*
 g:netrw_scp_cmd	pi_netrw.txt	/*g:netrw_scp_cmd*
 g:netrw_scpport	pi_netrw.txt	/*g:netrw_scpport*
 g:netrw_sftp_cmd	pi_netrw.txt	/*g:netrw_sftp_cmd*
-g:netrw_shq	pi_netrw.txt	/*g:netrw_shq*
 g:netrw_silent	pi_netrw.txt	/*g:netrw_silent*
 g:netrw_sort_by	pi_netrw.txt	/*g:netrw_sort_by*
 g:netrw_sort_direction	pi_netrw.txt	/*g:netrw_sort_direction*
+g:netrw_sort_options	pi_netrw.txt	/*g:netrw_sort_options*
 g:netrw_sort_sequence	pi_netrw.txt	/*g:netrw_sort_sequence*
 g:netrw_special_syntax	pi_netrw.txt	/*g:netrw_special_syntax*
 g:netrw_ssh_browse_reject	pi_netrw.txt	/*g:netrw_ssh_browse_reject*
@@ -1473,12 +1485,14 @@ g:netrw_use_noswf	pi_netrw.txt	/*g:netrw_use_noswf*
 g:netrw_use_nt_rcp	pi_netrw.txt	/*g:netrw_use_nt_rcp*
 g:netrw_win95ftp	pi_netrw.txt	/*g:netrw_win95ftp*
 g:netrw_winsize	pi_netrw.txt	/*g:netrw_winsize*
+g:netrw_xstrlen	pi_netrw.txt	/*g:netrw_xstrlen*
 g:tcommentMapLeader1	tComment.txt	/*g:tcommentMapLeader1*
 g:tcommentMapLeader2	tComment.txt	/*g:tcommentMapLeader2*
 g:tcommentMapLeaderOp1	tComment.txt	/*g:tcommentMapLeaderOp1*
 g:tcommentMapLeaderOp2	tComment.txt	/*g:tcommentMapLeaderOp2*
 g:tcommentOpModeExtra	tComment.txt	/*g:tcommentOpModeExtra*
 g:vimball_home	pi_vimball.txt	/*g:vimball_home*
+g:vimball_path_escape	pi_vimball.txt	/*g:vimball_path_escape*
 g:visincr_datedivset	visincr.txt	/*g:visincr_datedivset*
 getlatestvimscripts-install	pi_getscript.txt	/*getlatestvimscripts-install*
 getscript	pi_getscript.txt	/*getscript*
@@ -1543,6 +1557,7 @@ matchit.txt	matchit.txt	/*matchit.txt*
 matchit.vim	matchit.txt	/*matchit.vim*
 netreadfixup	pi_netrw.txt	/*netreadfixup*
 netrw	pi_netrw.txt	/*netrw*
+netrw-%	pi_netrw.txt	/*netrw-%*
 netrw--	pi_netrw.txt	/*netrw--*
 netrw-D	pi_netrw.txt	/*netrw-D*
 netrw-O	pi_netrw.txt	/*netrw-O*
@@ -1556,7 +1571,6 @@ netrw-bookmark	pi_netrw.txt	/*netrw-bookmark*
 netrw-bookmarks	pi_netrw.txt	/*netrw-bookmarks*
 netrw-browse	pi_netrw.txt	/*netrw-browse*
 netrw-browse-cmds	pi_netrw.txt	/*netrw-browse-cmds*
-netrw-browse-intro	pi_netrw.txt	/*netrw-browse-intro*
 netrw-browse-maps	pi_netrw.txt	/*netrw-browse-maps*
 netrw-browser	pi_netrw.txt	/*netrw-browser*
 netrw-browser-options	pi_netrw.txt	/*netrw-browser-options*
@@ -1571,7 +1585,6 @@ netrw-cr	pi_netrw.txt	/*netrw-cr*
 netrw-credits	pi_netrw.txt	/*netrw-credits*
 netrw-ctrl-h	pi_netrw.txt	/*netrw-ctrl-h*
 netrw-ctrl-l	pi_netrw.txt	/*netrw-ctrl-l*
-netrw-ctrl_h	pi_netrw.txt	/*netrw-ctrl_h*
 netrw-ctrl_l	pi_netrw.txt	/*netrw-ctrl_l*
 netrw-curdir	pi_netrw.txt	/*netrw-curdir*
 netrw-d	pi_netrw.txt	/*netrw-d*
@@ -1595,11 +1608,13 @@ netrw-gx	pi_netrw.txt	/*netrw-gx*
 netrw-handler	pi_netrw.txt	/*netrw-handler*
 netrw-help	pi_netrw.txt	/*netrw-help*
 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*
+netrw-intro-browse	pi_netrw.txt	/*netrw-intro-browse*
 netrw-list	pi_netrw.txt	/*netrw-list*
 netrw-listbookmark	pi_netrw.txt	/*netrw-listbookmark*
 netrw-listhack	pi_netrw.txt	/*netrw-listhack*
@@ -1610,6 +1625,7 @@ netrw-mc	pi_netrw.txt	/*netrw-mc*
 netrw-md	pi_netrw.txt	/*netrw-md*
 netrw-me	pi_netrw.txt	/*netrw-me*
 netrw-mf	pi_netrw.txt	/*netrw-mf*
+netrw-mg	pi_netrw.txt	/*netrw-mg*
 netrw-mh	pi_netrw.txt	/*netrw-mh*
 netrw-ml_get	pi_netrw.txt	/*netrw-ml_get*
 netrw-mm	pi_netrw.txt	/*netrw-mm*
@@ -1652,6 +1668,11 @@ netrw-psftp	pi_netrw.txt	/*netrw-psftp*
 netrw-putty	pi_netrw.txt	/*netrw-putty*
 netrw-qb	pi_netrw.txt	/*netrw-qb*
 netrw-qf	pi_netrw.txt	/*netrw-qf*
+netrw-quickcom	pi_netrw.txt	/*netrw-quickcom*
+netrw-quickcoms	pi_netrw.txt	/*netrw-quickcoms*
+netrw-quickhelp	pi_netrw.txt	/*netrw-quickhelp*
+netrw-quickmap	pi_netrw.txt	/*netrw-quickmap*
+netrw-quickmaps	pi_netrw.txt	/*netrw-quickmaps*
 netrw-r	pi_netrw.txt	/*netrw-r*
 netrw-read	pi_netrw.txt	/*netrw-read*
 netrw-ref	pi_netrw.txt	/*netrw-ref*
diff --git a/vimfiles/plugin/MultipleSearch.vim b/vimfiles/plugin/MultipleSearch.vim
new file mode 100644
index 0000000..e0b470b
--- /dev/null
+++ b/vimfiles/plugin/MultipleSearch.vim
@@ -0,0 +1,51 @@
+" File:		MultipleSearch.vim (global plugin)
+" Last Changed: 14 Aug 2008
+" Maintainer:	Dan Sharp <dwsharp at hotmail dot com>
+" Version:	1.3
+" License:      Vim License
+" GetLatestVimScripts: 479 1 :AutoInstall: MultipleSearch.vba
+
+if exists('loaded_multiplesearch')
+    finish
+endif
+let loaded_multiplesearch = 1
+
+
+" Vim versions prior to 7.0 don't support the autoload mechanism, so go ahead
+" and load the 'autoload' segment of the code and map the commands using the
+" non-autoload format.
+if v:version < 700
+    runtime autoload/MultipleSearch.vim
+
+    if !(exists(":SearchBuffers") == 2)
+        command -nargs=* SearchBuffers :silent call MultipleSearch(1, <q-args>)
+    endif
+
+    if !(exists(":Search") == 2)
+        command -nargs=* Search :silent call MultipleSearch(0, <q-args>)
+    endif
+
+    " Following Manuel's idea, adapt the former 'Super Star' tip from vim.org to work with
+    " :Search on a visual selection.
+    "vnoremap <silent> <Leader>* y:execute ':Search \V<C-R>=substitute(escape(@@,"/\\"),"\n","\\\\n","ge")<CR>'<CR>
+    vnoremap <silent> <Leader>* y:call MultipleSearch(0,'\V'.substitute(escape(@@,"\\/\"'"),"\n",'\\n','ge'))<CR>
+else
+    " Only autoload the Search commands, since we shouldn't need to use
+    " :SearchReset and :SearchReinit until after the first :Search.
+    if !(exists(":SearchBuffers") == 2)
+        command -nargs=* SearchBuffers :silent call MultipleSearch#MultipleSearch(1, <q-args>)
+    endif
+
+    if !(exists(":Search") == 2)
+        command -nargs=* Search :silent call MultipleSearch#MultipleSearch(0, <q-args>)
+    endif
+
+    " Following Manuel's idea, adapt the former 'Super Star' tip from vim.org to work with
+    " :Search on a visual selection.
+    vnoremap <silent> <Leader>* y:call MultipleSearch#MultipleSearch(0,'\V'.substitute(escape(@@,"\\/\"'"),"\n",'\\n','ge'))<CR>
+endif
+
+" Thanks to Manuel Picaza for the following mapping to :Search the word under
+" the cursor.
+nnoremap <silent> <Leader>* :execute ':Search \<' . expand('<cword>') . '\>'<cr>
+
diff --git a/vimfiles/plugin/matrix.vim b/vimfiles/plugin/matrix.vim
index 3128644..9ed838d 100644
--- a/vimfiles/plugin/matrix.vim
+++ b/vimfiles/plugin/matrix.vim
@@ -22,10 +22,16 @@
 " Doesn't work if multiple windows exist before script started.  In
 " that case the script will abort with error message.
 "
+" If the current buffer is modified, some error messages will appear
+" before the script starts, and an extra window is left behind after
+" the script exits.  Workaround: save your buffers first.
+"
 "Other Info:
 " Inspired by cmatrix...
 " Didn't feel inspired enough to start using pico/nano, of course ^_^;
 "
+" 05/13/08 - disable cursorline, cursorcolumn and spell
+"            (thanks to Diederick Niehorster for the suggestion).
 " 12/21/06 - multiwindow support by S. Lockwood-Childs.
 " 10/03/05 - added silent! to cursor positioning code to stop drawing
 "            numbers during animation (thanks to David Eggum for the
@@ -199,6 +205,12 @@ function! s:Init()
       let s:o_ts = &titlestring
       exec 'set titlestring=\ '
    endif
+   if v:version >= 700
+      let s:o_spell = &spell
+      let s:o_cul = &cul
+      let s:o_cuc = &cuc
+      set nospell nocul nocuc
+   endif
    let s:o_ch = &ch
    let s:o_ls = &ls
    let s:o_lz = &lz
@@ -259,6 +271,12 @@ function! s:Cleanup()
       let &titlestring = s:o_ts
       unlet s:o_ts
    endif
+   if v:version >= 700
+      let &spell = s:o_spell
+      let &cul = s:o_cul
+      let &cuc = s:o_cuc
+      unlet s:o_cul s:o_cuc
+   endif
    let &ch = s:o_ch
    let &ls = s:o_ls
    let &lz = s:o_lz
@@ -298,9 +316,9 @@ function! Matrix()
 endfunction
 
 
-if !has('virtualedit') || !has('windows')
+if !has('virtualedit') || !has('windows') || !has('syntax')
    echohl ErrorMsg
-   echon 'Not enough features, need at least +virtualedit and +windows'
+   echon 'Not enough features, need at least +virtualedit, +windows and +syntax'
    echohl None
 else
    command! Matrix call Matrix()
diff --git a/vimfiles/plugin/netrwPlugin.vim b/vimfiles/plugin/netrwPlugin.vim
index 03b9591..e30ad82 100644
--- a/vimfiles/plugin/netrwPlugin.vim
+++ b/vimfiles/plugin/netrwPlugin.vim
@@ -1,9 +1,9 @@
 " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN SECTION
-" Date:		Aug 09, 2007
+" Date:		Aug 10, 2008
 " Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -22,7 +22,7 @@
 if &cp || exists("g:loaded_netrwPlugin")
  finish
 endif
-let g:loaded_netrwPlugin = "v123"
+let g:loaded_netrwPlugin = "v133"
 let s:keepcpo            = &cpo
 if v:version < 700
  echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
@@ -47,19 +47,19 @@ augroup END
 augroup Network
  au!
  if has("win32") || has("win95") || has("win64") || has("win16")
-  au BufReadCmd  file://*		exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "bwipe ".expand("<amatch>")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
+  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
  else
-  au BufReadCmd  file://*		exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "bwipe ".expand("<amatch>")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
-  au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "bwipe ".substitute(expand("<amatch>"),'file://\(\k\+@\)\=','','')|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>"))
+  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
+  au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
  endif
- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<amatch>")|exe '2Nread "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>")
- au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".expand("<amatch>")|exe 'Nread "'   .expand("<amatch>").'"'|exe "silent doau FileReadPost ".expand("<amatch>")
- au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".expand("<amatch>")|exe 'Nwrite "' .expand("<amatch>").'"'|exe "silent doau BufWritePost ".expand("<amatch>")
- au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>")
+ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|exe '2Nread '.fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
+ au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|exe 'Nread '.fnameescape(expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
+ au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
+ au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
  try
-  au SourceCmd    ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe 'Nsource "'.expand("<amatch>").'"'
+  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
  catch /^Vim\%((\a\+)\)\=:E216/
-  au SourcePre    ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe 'Nsource "'.expand("<amatch>").'"'
+  au SourcePre   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
  endtry
 augroup END
 
@@ -87,7 +87,7 @@ if !exists("g:netrw_nogx") && maparg('g','n') == ""
  if !hasmapto('<Plug>NetrwBrowseX')
   nmap <unique> gx <Plug>NetrwBrowseX
  endif
- nno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr>
+ nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
 endif
 
 " ---------------------------------------------------------------------
@@ -155,24 +155,6 @@ fun! NetUserPass(...)
 "  call Dret("NetUserPass")
 endfun
 
-" ------------------------------------------------------------------------
-" NetReadFixup: this sort of function is typically written by the user {{{1
-"               to handle extra junk that their system's ftp dumps
-"               into the transfer.  This function is provided as an
-"               example and as a fix for a Windows 95 problem: in my
-"               experience, win95's ftp always dumped four blank lines
-"               at the end of the transfer.
-if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
- fun! NetReadFixup(method, line1, line2)
-"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
-   if method == 3   " ftp (no <.netrc>)
-    let fourblanklines= line2 - 3
-    silent fourblanklines.",".line2."g/^\s*/d"
-   endif
-"   call Dret("NetReadFixup")
- endfun
-endif
-
 " ------------------------------------------------------------------------
 " Modelines And Restoration: {{{1
 let &cpo= s:keepcpo
diff --git a/vimfiles/plugin/tComment.vim b/vimfiles/plugin/tComment.vim
index 3810663..2eba17a 100644
--- a/vimfiles/plugin/tComment.vim
+++ b/vimfiles/plugin/tComment.vim
@@ -2,44 +2,62 @@
 " @Author:      Thomas Link (micathom AT gmail com)
 " @License:     GPL (see http://www.gnu.org/licenses/gpl.txt)
 " @Created:     27-Dez-2004.
-" @Last Change: 2007-08-30.
-" @Revision:    1.7.608
+" @Last Change: 2008-05-15.
+" @Revision:    1.9.664
 " 
-" vimscript #1173
+" GetLatestVimScripts: 1173 1 tComment.vim
 
 if &cp || exists('loaded_tcomment')
     finish
 endif
-let loaded_tcomment = 107
-
-function! s:DefVar(name, val)
-    if !exists(a:name)
-        " exec "let ". a:name ."='". a:val ."'"
-        exec 'let '. a:name .'="'. escape(a:val, '"\') .'"'
-    endif
-endf
+let loaded_tcomment = 109
 
 " If true, comment blank lines too
-call s:DefVar('g:tcommentBlankLines', 1)
+if !exists("g:tcommentBlankLines")
+    let g:tcommentBlankLines = 1
+endif
 
-call s:DefVar('g:tcommentMapLeader1', '<c-_>')
-call s:DefVar('g:tcommentMapLeader2', '<Leader>_')
-" call s:DefVar('g:tcommentMapLeaderOp1', '<Leader>-')
-call s:DefVar('g:tcommentMapLeaderOp1', 'gc')
-call s:DefVar('g:tcommentMapLeaderOp2', 'gC')
-call s:DefVar('g:tcommentOpModeExtra', '')
+if !exists("g:tcommentMapLeader1")
+    let g:tcommentMapLeader1 = '<c-_>'
+endif
+if !exists("g:tcommentMapLeader2")
+    let g:tcommentMapLeader2 = '<Leader>_'
+endif
+if !exists("g:tcommentMapLeaderOp1")
+    let g:tcommentMapLeaderOp1 = 'gc'
+endif
+if !exists("g:tcommentMapLeaderOp2")
+    let g:tcommentMapLeaderOp2 = 'gC'
+endif
+if !exists("g:tcommentOpModeExtra")
+    let g:tcommentOpModeExtra = ''
+endif
 
 " Guess the file type based on syntax names always or for some fileformat only
-call s:DefVar('g:tcommentGuessFileType', 0)
+if !exists("g:tcommentGuessFileType")
+    let g:tcommentGuessFileType = 0
+endif
 " In php documents, the php part is usually marked as phpRegion. We thus 
 " assume that the buffers default comment style isn't php but html
-call s:DefVar('g:tcommentGuessFileType_dsl', 'xml')
-call s:DefVar('g:tcommentGuessFileType_php', 'html')
-call s:DefVar('g:tcommentGuessFileType_html', 1)
-call s:DefVar('g:tcommentGuessFileType_tskeleton', 1)
-call s:DefVar('g:tcommentGuessFileType_vim',  1)
+if !exists("g:tcommentGuessFileType_dsl")
+    let g:tcommentGuessFileType_dsl = 'xml'
+endif
+if !exists("g:tcommentGuessFileType_php")
+    let g:tcommentGuessFileType_php = 'html'
+endif
+if !exists("g:tcommentGuessFileType_html")
+    let g:tcommentGuessFileType_html = 1
+endif
+if !exists("g:tcommentGuessFileType_tskeleton")
+    let g:tcommentGuessFileType_tskeleton = 1
+endif
+if !exists("g:tcommentGuessFileType_vim")
+    let g:tcommentGuessFileType_vim = 1
+endif
 
-call s:DefVar('g:tcommentIgnoreTypes_php', 'sql')
+if !exists("g:tcommentIgnoreTypes_php")
+    let g:tcommentIgnoreTypes_php = 'sql'
+endif
 
 if !exists('g:tcommentSyntaxMap') "{{{2
     let g:tcommentSyntaxMap = {
@@ -61,30 +79,45 @@ endif
 
 " I personally find this style rather irritating but here is an alternative 
 " definition that does this left-handed bar thing
-call s:DefVar('g:tcommentBlockC', "/*%s */\n * ")
-call s:DefVar('g:tcommentBlockC2', "/**%s */\n * ")
-" call s:DefVar('g:tcommentBlockC', "/*%s */\n    ")
-call s:DefVar('g:tcommentInlineC', "/* %s */")
+if !exists("g:tcommentBlockC")
+    let g:tcommentBlockC = "/*%s */\n * "
+endif
+if !exists("g:tcommentBlockC2")
+    let g:tcommentBlockC2 = "/**%s */\n * "
+endif
+if !exists("g:tcommentInlineC")
+    let g:tcommentInlineC = "/* %s */"
+endif
 
-call s:DefVar('g:tcommentBlockXML', "<!--%s-->\n  ")
-call s:DefVar('g:tcommentInlineXML', "<!-- %s -->")
+if !exists("g:tcommentBlockXML")
+    let g:tcommentBlockXML = "<!--%s-->\n  "
+endif
+if !exists("g:tcommentInlineXML")
+    let g:tcommentInlineXML = "<!-- %s -->"
+endif
+
+let g:tcommentFileTypesDirty = 1
 
 " Currently this function just sets a variable
 function! TCommentDefineType(name, commentstring)
-    call s:DefVar('g:tcomment_'. a:name, a:commentstring)
-    let s:tcommentFileTypesDirty = 1
+    if !exists('g:tcomment_'. a:name)
+        let g:tcomment_{a:name} = a:commentstring
+    endif
+    let g:tcommentFileTypesDirty = 1
 endf
 
 function! TCommentTypeExists(name)
     return exists('g:tcomment_'. a:name)
 endf
 
+call TCommentDefineType('aap',              '# %s'             )
 call TCommentDefineType('ada',              '-- %s'            )
 call TCommentDefineType('apache',           '# %s'             )
 call TCommentDefineType('autoit',           '; %s'             )
+call TCommentDefineType('asm',              '; %s'             )
 call TCommentDefineType('awk',              '# %s'             )
 call TCommentDefineType('catalog',          '-- %s --'         )
-call TCommentDefineType('catalog_block',    '--%s--\n  '       )
+call TCommentDefineType('catalog_block',    "--%s--\n  "       )
 call TCommentDefineType('cpp',              '// %s'            )
 call TCommentDefineType('cpp_inline',       g:tcommentInlineC  )
 call TCommentDefineType('cpp_block',        g:tcommentBlockC   )
@@ -105,9 +138,11 @@ call TCommentDefineType('dosini',           '; %s'             )
 call TCommentDefineType('dsl',              '; %s'             )
 call TCommentDefineType('dylan',            '// %s'            )
 call TCommentDefineType('eiffel',           '-- %s'            )
+call TCommentDefineType('eruby',            '<%%# %s%%>'       )
 call TCommentDefineType('gtkrc',            '# %s'             )
+call TCommentDefineType('gitcommit',        '# %s'             )
 call TCommentDefineType('haskell',          '-- %s'            )
-call TCommentDefineType('haskell_block',    '{-%s-}\n   '      )
+call TCommentDefineType('haskell_block',    "{-%s-}\n   "      )
 call TCommentDefineType('haskell_inline',   '{- %s -}'         )
 call TCommentDefineType('html',             '<!-- %s -->'      )
 call TCommentDefineType('html_inline',      g:tcommentInlineXML)
@@ -122,32 +157,37 @@ call TCommentDefineType('javascript_block', g:tcommentBlockC   )
 call TCommentDefineType('java',             '/* %s */'         )
 call TCommentDefineType('java_inline',      g:tcommentInlineC  )
 call TCommentDefineType('java_block',       g:tcommentBlockC   )
+call TCommentDefineType('java_doc_block',   g:tcommentBlockC2  )
 call TCommentDefineType('lisp',             '; %s'             )
 call TCommentDefineType('m4',               'dnl %s'           )
 call TCommentDefineType('mail',             '> %s'             )
+call TCommentDefineType('msidl',            '// %s'            )
+call TCommentDefineType('msidl_block',      g:tcommentBlockC   )
 call TCommentDefineType('nroff',            '.\\" %s'          )
+call TCommentDefineType('nsis',             '# %s'             )
 call TCommentDefineType('objc',             '/* %s */'         )
 call TCommentDefineType('objc_inline',      g:tcommentInlineC  )
 call TCommentDefineType('objc_block',       g:tcommentBlockC   )
 call TCommentDefineType('ocaml',            '(* %s *)'         )
 call TCommentDefineType('ocaml_inline',     '(* %s *)'         )
-call TCommentDefineType('ocaml_block',      '(*%s*)\n   '      )
+call TCommentDefineType('ocaml_block',      "(*%s*)\n   "      )
 call TCommentDefineType('pascal',           '(* %s *)'         )
 call TCommentDefineType('pascal_inline',    '(* %s *)'         )
-call TCommentDefineType('pascal_block',     '(*%s*)\n   '      )
+call TCommentDefineType('pascal_block',     "(*%s*)\n   "      )
 call TCommentDefineType('perl',             '# %s'             )
-call TCommentDefineType('perl_block',       '=cut%s=cut'       )
+call TCommentDefineType('perl_block',       "=cut%s=cut"       )
 call TCommentDefineType('php',              '// %s'            )
 call TCommentDefineType('php_inline',       g:tcommentInlineC  )
 call TCommentDefineType('php_block',        g:tcommentBlockC   )
 call TCommentDefineType('php_2_block',      g:tcommentBlockC2  )
 call TCommentDefineType('po',               '# %s'             )
 call TCommentDefineType('prolog',           '%% %s'            )
+call TCommentDefineType('rc',               '// %s'            )
 call TCommentDefineType('readline',         '# %s'             )
 call TCommentDefineType('ruby',             '# %s'             )
 call TCommentDefineType('ruby_3',           '### %s'           )
-call TCommentDefineType('ruby_block',       '=begin rdoc%s=end')
-call TCommentDefineType('ruby_nodoc_block', '=begin%s=end'     )
+call TCommentDefineType('ruby_block',       "=begin rdoc%s=end")
+call TCommentDefineType('ruby_nodoc_block', "=begin%s=end"     )
 call TCommentDefineType('r',                '# %s'             )
 call TCommentDefineType('sbs',              "' %s"             )
 call TCommentDefineType('scheme',           '; %s'             )
@@ -159,7 +199,9 @@ call TCommentDefineType('sh',               '# %s'             )
 call TCommentDefineType('sql',              '-- %s'            )
 call TCommentDefineType('spec',             '# %s'             )
 call TCommentDefineType('sps',              '* %s.'            )
-call TCommentDefineType('sps_block',        '* %s.'            )
+call TCommentDefineType('sps_block',        "* %s."            )
+call TCommentDefineType('spss',             '* %s.'            )
+call TCommentDefineType('spss_block',       "* %s."            )
 call TCommentDefineType('tcl',              '# %s'             )
 call TCommentDefineType('tex',              '%% %s'            )
 call TCommentDefineType('tpl',              '<!-- %s -->'      )
@@ -172,211 +214,34 @@ call TCommentDefineType('websec',           '# %s'             )
 call TCommentDefineType('xml',              '<!-- %s -->'      )
 call TCommentDefineType('xml_inline',       g:tcommentInlineXML)
 call TCommentDefineType('xml_block',        g:tcommentBlockXML )
+call TCommentDefineType('xs',               '// %s'            )
+call TCommentDefineType('xs_block',         g:tcommentBlockC   )
 call TCommentDefineType('xslt',             '<!-- %s -->'      )
 call TCommentDefineType('xslt_inline',      g:tcommentInlineXML)
 call TCommentDefineType('xslt_block',       g:tcommentBlockXML )
 call TCommentDefineType('yaml',             '# %s'             )
 
-let s:tcommentFileTypesDirty = 1
-
-function! s:DefaultValue(option)
-    exec 'let '. a:option .' = &'. a:option
-    exec 'set '. a:option .'&'
-    exec 'let default = &'. a:option
-    exec 'let &'. a:option .' = '. a:option
-    return default
-endf
-
-let s:defaultComments      = s:DefaultValue('comments')
-let s:defaultCommentString = s:DefaultValue('commentstring')
-let s:nullCommentString    = '%s'
-
-" TComment(line1, line2, ?commentMode, ?commentAnyway, ?commentBegin, ?commentEnd)
-" commentMode:
-"   G ... guess
-"   B ... block
-"   I ... inline
-"   R ... right
-function! TComment(beg, end, ...)
-    " save the cursor position
-    let co = col('.')
-    let li = line('.')
-    let s:pos_end = getpos("'>")
-    let commentMode   = a:0 >= 1 ? a:1 : 'G'
-    let commentAnyway = a:0 >= 2 ? (a:2 == '!') : 0
-    if commentMode =~# 'i'
-        let commentMode = substitute(commentMode, '\Ci', line("'<") == line("'>") ? 'I' : 'G', 'g')
-    endif
-    if commentMode =~# 'R' || commentMode =~# 'I'
-        let cstart = col("'<")
-        if cstart == 0
-            let cstart = col('.')
-        endif
-        if commentMode =~# 'R'
-            let commentMode = substitute(commentMode, '\CR', 'G', 'g')
-            let cend = 0
-        else
-            let cend = col("'>")
-        endif
-    else
-        let cstart = 0
-        let cend   = 0
-    endif
-    " TLogVAR commentMode, cstart, cend
-    " get the correct commentstring
-    if a:0 >= 3 && a:3 != ''
-        let cms = s:EncodeCommentPart(a:3) .'%s'
-        if a:0 >= 4 && a:4 != ''
-            let cms = cms . s:EncodeCommentPart(a:4)
-        endif
-    else
-        let [cms, commentMode] = s:GetCommentString(a:beg, a:end, commentMode)
-    endif
-    let cms0 = s:BlockGetCommentString(cms)
-    let cms0 = escape(cms0, '\')
-    " make whitespace optional; this conflicts with comments that require some 
-    " whitespace
-    let cmtCheck = substitute(cms0, '\([	 ]\)', '\1\\?', 'g')
-    " turn commentstring into a search pattern
-    let cmtCheck = s:SPrintF(cmtCheck, '\(\_.\{-}\)')
-    " set commentMode and indentStr
-    let [indentStr, uncomment] = s:CommentDef(a:beg, a:end, cmtCheck, commentMode, cstart, cend)
-    " TLogVAR indentStr, uncomment
-    if commentAnyway
-        let uncomment = 0
-    endif
-    " go
-    if commentMode =~# 'B'
-        " We want a comment block
-        call s:CommentBlock(a:beg, a:end, uncomment, cmtCheck, cms, indentStr)
-    else
-        " We want commented lines
-        " final search pattern for uncommenting
-        let cmtCheck   = escape('\V\^\(\s\{-}\)'. cmtCheck .'\$', '"/\')
-        " final pattern for commenting
-        let cmtReplace = escape(cms0, '"/')
-        silent exec a:beg .','. a:end .'s/\V'. 
-                    \ s:StartRx(cstart) . indentStr .'\zs\(\.\*\)'. s:EndRx(cend) .'/'.
-                    \ '\=s:ProcessedLine('. uncomment .', submatch(0), "'. cmtCheck .'", "'. cmtReplace .'")/ge'
-    endif
-    " reposition cursor
-    " TLogVAR commentMode
-    if commentMode =~ '>'
-        call setpos('.', s:pos_end)
-    else
-        " TLogVAR li, co
-        call cursor(li, co)
-    endif
-endf
-
-" :line1,line2 TComment ?commentBegin ?commentEnd
-command! -bang -range -nargs=* TComment keepjumps call TComment(<line1>, <line2>, 'G', "<bang>", <f-args>)
-
-" :line1,line2 TCommentRight ?commentBegin ?commentEnd
-command! -bang -range -nargs=* TCommentRight keepjumps call TComment(<line1>, <line2>, 'R', "<bang>", <f-args>)
-
-" :line1,line2 TCommentBlock ?commentBegin ?commentEnd
-command! -bang -range -nargs=* TCommentBlock keepjumps call TComment(<line1>, <line2>, 'B', "<bang>", <f-args>)
-
-" :line1,line2 TCommentInline ?commentBegin ?commentEnd
-command! -bang -range -nargs=* TCommentInline keepjumps call TComment(<line1>, <line2>, 'I', "<bang>", <f-args>)
-
-" :line1,line2 TCommentMaybeInline ?commentBegin ?commentEnd
-command! -bang -range -nargs=* TCommentMaybeInline keepjumps call TComment(<line1>, <line2>, 'i', "<bang>", <f-args>)
-
-
-function! TCommentOperator(type, ...) "{{{3
-    let commentMode = a:0 >= 1 ? a:1 : ''
-    let bang = a:0 >= 2 ? a:2 : ''
-    let sel_save = &selection
-    let &selection = "inclusive"
-    let reg_save = @@
-    " let pos = getpos('.')
-    " TLogVAR a:type
-    try
-        if a:type == 'line'
-            silent exe "normal! '[V']"
-            let commentMode1 = 'G'
-        elseif a:type == 'block'
-            silent exe "normal! `[\<C-V>`]"
-            let commentMode1 = 'I'
-        else
-            silent exe "normal! `[v`]"
-            let commentMode1 = 'i'
-        endif
-        if empty(commentMode)
-            let commentMode = commentMode1
-        endif
-        let beg = line("'[")
-        let end = line("']")
-        norm! 
-        let commentMode .= g:tcommentOpModeExtra
-        call TComment(beg, end, commentMode, bang)
-    finally
-        let &selection = sel_save
-        let @@ = reg_save
-        if g:tcommentOpModeExtra !~ '>'
-            " TLogVAR pos
-            " call setpos('.', pos)
-            call setpos('.', w:tcommentPos)
-            unlet! w:tcommentPos
-        endif
-    endtry
-endf
-
-
-function! TCommentOperatorLine(type) "{{{3
-    call TCommentOperator(a:type, 'G')
-endf
-
-
-function! TCommentOperatorAnyway(type) "{{{3
-    call TCommentOperator(a:type, '', '!')
-endf
-
-
-function! TCommentOperatorLineAnyway(type) "{{{3
-    call TCommentOperator(a:type, 'G', '!')
-endf
-
-
-" comment text as if it were of a specific filetype
-function! TCommentAs(beg, end, commentAnyway, filetype, ...)
-    let ccount = a:0 >= 1 ? a:1 : 1
-    " TLogVAR ccount
-    if a:filetype =~ '_block$'
-        let commentMode = 'B'
-        let ft = substitute(a:filetype, '_block$', '', '')
-    elseif a:filetype =~ '_inline$'
-        let commentMode = 'I'
-        let ft = substitute(a:filetype, '_inline$', '', '')
-    else 
-        let commentMode = 'G'
-        let ft = a:filetype
-    endif
-    let [cms, commentMode] = s:GetCommentString(a:beg, a:end, commentMode, ft)
-    let pre  = substitute(cms, '%s.*$', '', '')
-    let pre  = substitute(pre, '%%', '%', 'g')
-    let post = substitute(cms, '^.\{-}%s', '', '')
-    let post = substitute(post, '%%', '%', 'g')
-    if ccount > 1
-        let pre_l = matchlist(pre, '^\(\S\+\)\(.*\)$')
-        " TLogVAR pre_l
-        if !empty(get(pre_l, 1))
-            let pre  = repeat(pre_l[1], ccount) . pre_l[2]
-        endif
-        let post_l = matchlist(post, '^\(\s*\)\(.\+\)$')
-        " TLogVAR post_l
-        if !empty(get(post_l, 2))
-            let post = post_l[1] . repeat(post_l[2], ccount)
-        endif
-    endif
-    keepjumps call TComment(a:beg, a:end, commentMode, a:commentAnyway, pre, post)
-endf
 
 " :line1,line2 TCommentAs commenttype
-command! -bang -complete=custom,TCommentFileTypes -range -nargs=+ TCommentAs 
-            \ call TCommentAs(<line1>, <line2>, "<bang>", <f-args>)
+command! -bang -complete=customlist,tcomment#FileTypes -range -nargs=+ TCommentAs 
+            \ call tcomment#CommentAs(<line1>, <line2>, "<bang>", <f-args>)
+
+" :line1,line2 TComment ?commentBegin ?commentEnd
+command! -bang -range -nargs=* TComment keepjumps call tcomment#Comment(<line1>, <line2>, 'G', "<bang>", <f-args>)
+
+" :line1,line2 TCommentRight ?commentBegin ?commentEnd
+command! -bang -range -nargs=* TCommentRight keepjumps call tcomment#Comment(<line1>, <line2>, 'R', "<bang>", <f-args>)
+
+" :line1,line2 TCommentBlock ?commentBegin ?commentEnd
+command! -bang -range -nargs=* TCommentBlock keepjumps call tcomment#Comment(<line1>, <line2>, 'B', "<bang>", <f-args>)
+
+" :line1,line2 TCommentInline ?commentBegin ?commentEnd
+command! -bang -range -nargs=* TCommentInline keepjumps call tcomment#Comment(<line1>, <line2>, 'I', "<bang>", <f-args>)
+
+" :line1,line2 TCommentMaybeInline ?commentBegin ?commentEnd
+command! -bang -range -nargs=* TCommentMaybeInline keepjumps call tcomment#Comment(<line1>, <line2>, 'i', "<bang>", <f-args>)
+
+
 
 if (g:tcommentMapLeader1 != '')
     exec 'noremap <silent> '. g:tcommentMapLeader1 .'<c-_> :TComment<cr>'
@@ -413,363 +278,16 @@ if (g:tcommentMapLeader2 != '')
     exec 'noremap '. g:tcommentMapLeader2 .'s :TCommentAs <c-r>=&ft<cr>_'
 endif
 if (g:tcommentMapLeaderOp1 != '')
-    exec 'noremap <silent> '. g:tcommentMapLeaderOp1 .' :let w:tcommentPos = getpos(".") \| set opfunc=TCommentOperator<cr>g@'
-    exec 'noremap <silent> '. g:tcommentMapLeaderOp1 .'c :let w:tcommentPos = getpos(".") \| set opfunc=TCommentOperatorLine<cr>g@$'
+    exec 'nnoremap <silent> '. g:tcommentMapLeaderOp1 .' :let w:tcommentPos = getpos(".") \| set opfunc=tcomment#Operator<cr>g@'
+    exec 'nnoremap <silent> '. g:tcommentMapLeaderOp1 .'c :let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorLine<cr>g@$'
+    exec 'vnoremap <silent> '. g:tcommentMapLeaderOp1 .' :TCommentMaybeInline<cr>'
 endif 
 if (g:tcommentMapLeaderOp2 != '')
-    exec 'noremap <silent> '. g:tcommentMapLeaderOp2 .' :let w:tcommentPos = getpos(".") \| set opfunc=TCommentOperatorAnyway<cr>g@'
-    exec 'noremap <silent> '. g:tcommentMapLeaderOp2 .'c :let w:tcommentPos = getpos(".") \| set opfunc=TCommentOperatorLineAnyway<cr>g@$'
+    exec 'nnoremap <silent> '. g:tcommentMapLeaderOp2 .' :let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorAnyway<cr>g@'
+    exec 'nnoremap <silent> '. g:tcommentMapLeaderOp2 .'c :let w:tcommentPos = getpos(".") \| set opfunc=tcomment#OperatorLineAnyway<cr>g@$'
+    exec 'vnoremap <silent> '. g:tcommentMapLeaderOp2 .' :TCommentMaybeInline<cr>'
 endif 
 
-
-" ----------------------------------------------------------------
-" collect all variables matching ^tcomment_
-function! TCommentCollectFileTypes()
-    if s:tcommentFileTypesDirty
-        let t = @t
-        try
-            redir @t
-            silent let
-            redir END
-            let g:tcommentFileTypes = substitute("\n". @t ."\n", '\n\(tcomment_\(\w\+\)\|\w\+\).\{-}\ze\n', '\n\2', 'g')
-            let g:tcommentFileTypes = substitute(g:tcommentFileTypes, '\(\n\)\n\+', '\1', 'g')
-            let g:tcommentFileTypes = strpart(g:tcommentFileTypes, 1, strlen(g:tcommentFileTypes) - 2)
-        finally
-            let @t = t
-        endtry
-        let g:tcommentFileTypesRx = '\V\^\('. substitute(g:tcommentFileTypes, '\n', '\\|', 'g') .'\)\(\u\.\*\)\?\$'
-        let s:tcommentFileTypesDirty = 0
-    endif
-endf
-
-call TCommentCollectFileTypes()
-
-" return a list of filetypes for which a tcomment_{&ft} is defined
-function! TCommentFileTypes(ArgLead, CmdLine, CursorPos)
-    call TCommentCollectFileTypes()
-    if a:ArgLead == ''
-        return &filetype ."\n". g:tcommentFileTypes
-    else
-        return g:tcommentFileTypes
-    endif
-endf
-
-function! s:EncodeCommentPart(string)
-    return substitute(a:string, '%', '%%', 'g')
-endf
-
-" s:GetCommentString(beg, end, commentMode, ?filetype="")
-function! s:GetCommentString(beg, end, commentMode, ...)
-    let ft = a:0 >= 1 ? a:1 : ''
-    if ft != ''
-        let [cms, commentMode] = s:GetCustomCommentString(ft, a:commentMode)
-    else
-        let cms = ''
-        let commentMode = a:commentMode
-    endif
-    if cms == ''
-        if exists('b:commentstring')
-            let cms = b:commentstring
-            return s:GetCustomCommentString(&filetype, a:commentMode, cms)
-        elseif exists('b:commentStart') && b:commentStart != ''
-            let cms = s:EncodeCommentPart(b:commentStart) .' %s'
-            if exists('b:commentEnd') && b:commentEnd != ''
-                let cms = cms .' '. s:EncodeCommentPart(b:commentEnd)
-            endif
-            return s:GetCustomCommentString(&filetype, a:commentMode, cms)
-        elseif g:tcommentGuessFileType || (exists('g:tcommentGuessFileType_'. &filetype) 
-                    \ && g:tcommentGuessFileType_{&filetype} =~ '[^0]')
-            if g:tcommentGuessFileType_{&filetype} == 1
-                let altFiletype = ''
-            else
-                let altFiletype = g:tcommentGuessFileType_{&filetype}
-            endif
-            return s:GuessFileType(a:beg, a:end, a:commentMode, &filetype, altFiletype)
-        else
-            return s:GetCustomCommentString(&filetype, a:commentMode, s:GuessCurrentCommentString(a:commentMode))
-        endif
-    endif
-    return [cms, commentMode]
-endf
-
-" s:SPrintF(formatstring, ?values ...)
-" => string
-function! s:SPrintF(string, ...)
-    let n = 1
-    let r = ''
-    let s = a:string
-    while 1
-        let i = match(s, '%\(.\)')
-        if i >= 0
-            let x = s[i + 1]
-            let r = r . strpart(s, 0, i)
-            let s = strpart(s, i + 2)
-            if x == '%'
-                let r = r.'%'
-            else
-                if a:0 >= n
-                    exec 'let v = a:'. n
-                    let n = n + 1
-                else
-                    echoerr 'Malformed format string (too many arguments required): '. a:string
-                endif
-                if x ==# 's'
-                    let r = r.v
-                elseif x ==# 'S'
-                    let r = r.'"'.v.'"'
-                else
-                    echoerr 'Malformed format string: '. a:string
-                endif
-            endif
-        else
-            return r.s
-        endif
-    endwh
-endf
-
-function! s:StartRx(pos)
-    if a:pos == 0
-        return '\^'
-    else
-        return '\%'. a:pos .'c'
-    endif
-endf
-
-function! s:EndRx(pos)
-    if a:pos == 0
-        return '\$'
-    else
-        return '\%'. a:pos .'c'
-    endif
-endf
-
-function! s:GetIndentString(line, start)
-    let start = a:start > 0 ? a:start - 1 : 0
-    return substitute(strpart(getline(a:line), start), '\V\^\s\*\zs\.\*\$', '', '')
-endf
-
-function! s:CommentDef(beg, end, checkRx, commentMode, cstart, cend)
-    let mdrx = '\V'. s:StartRx(a:cstart) .'\s\*'. a:checkRx .'\s\*'. s:EndRx(0)
-    let line = getline(a:beg)
-    if a:cstart != 0 && a:cend != 0
-        let line = strpart(line, 0, a:cend - 1)
-    endif
-    let uncomment = (line =~ mdrx)
-    let it = s:GetIndentString(a:beg, a:cstart)
-    let il = indent(a:beg)
-    let n  = a:beg + 1
-    while n <= a:end
-        if getline(n) =~ '\S'
-            let jl = indent(n)
-            if jl < il
-                let it = s:GetIndentString(n, a:cstart)
-                let il = jl
-            endif
-            if a:commentMode =~# 'G'
-                if !(getline(n) =~ mdrx)
-                    let uncomment = 0
-                endif
-            endif
-        endif
-        let n = n + 1
-    endwh
-    if a:commentMode =~# 'B'
-        let t = @t
-        try
-            silent exec 'norm! '. a:beg.'G1|v'.a:end.'G$"ty'
-            let uncomment = (@t =~ mdrx)
-        finally
-            let @t = t
-        endtry
-    endif
-    return [it, uncomment]
-endf
-
-function! s:ProcessedLine(uncomment, match, checkRx, replace)
-    if !(a:match =~ '\S' || g:tcommentBlankLines)
-        return a:match
-    endif
-    let ml = len(a:match)
-    if a:uncomment
-        let rv = substitute(a:match, a:checkRx, '\1\2', '')
-    else
-        let rv = s:SPrintF(a:replace, a:match)
-    endif
-    " let md = len(rv) - ml
-    let s:pos_end = getpos('.')
-    let s:pos_end[2] += len(rv)
-    " TLogVAR pe, md, a:match
-    let rv = escape(rv, '\
')
-    let rv = substitute(rv, '\n', '\\\n', 'g')
-    return rv
-endf
-
-function! s:CommentBlock(beg, end, uncomment, checkRx, replace, indentStr)
-    let t = @t
-    try
-        silent exec 'norm! '. a:beg.'G1|v'.a:end.'G$"td'
-        let ms = s:BlockGetMiddleString(a:replace)
-        let mx = escape(ms, '\')
-        if a:uncomment
-            let @t = substitute(@t, '\V\^\s\*'. a:checkRx .'\$', '\1', '')
-            if ms != ''
-                let @t = substitute(@t, '\V\n'. a:indentStr . mx, '\n'. a:indentStr, 'g')
-            endif
-            let @t = substitute(@t, '^\n', '', '')
-            let @t = substitute(@t, '\n\s*$', '', '')
-        else
-            let cs = s:BlockGetCommentString(a:replace)
-            let cs = a:indentStr . substitute(cs, '%s', '%s'. a:indentStr, '')
-            if ms != ''
-                let ms = a:indentStr . ms
-                let mx = a:indentStr . mx
-                let @t = substitute(@t, '^'. a:indentStr, '', 'g')
-                let @t = ms . substitute(@t, '\n'. a:indentStr, '\n'. mx, 'g')
-            endif
-            let @t = s:SPrintF(cs, "\n". @t ."\n")
-        endif
-        silent norm! "tP
-    finally
-        let @t = t
-    endtry
-endf
-
-" inspired by Meikel Brandmeyer's EnhancedCommentify.vim
-" this requires that a syntax names are prefixed by the filetype name 
-" s:GuessFileType(beg, end, commentMode, filetype, ?fallbackFiletype)
-function! s:GuessFileType(beg, end, commentMode, filetype, ...)
-    if a:0 >= 1 && a:1 != ''
-        let [cms, commentMode] = s:GetCustomCommentString(a:1, a:commentMode)
-        if cms == ''
-            let cms = s:GuessCurrentCommentString(a:commentMode)
-        endif
-    else
-        let commentMode = s:CommentMode(a:commentMode, 'G')
-        let cms = s:GuessCurrentCommentString(0)
-    endif
-    let n  = a:beg
-    while n <= a:end
-        let m  = indent(n) + 1
-        let le = col('$')
-        while m < le
-            let syntaxName = synIDattr(synID(n, m, 1), 'name')
-            let ftypeMap   = get(g:tcommentSyntaxMap, syntaxName)
-            if !empty(ftypeMap)
-                return s:GetCustomCommentString(ftypeMap, a:commentMode, cms)
-            elseif syntaxName =~ g:tcommentFileTypesRx
-                let ft = substitute(syntaxName, g:tcommentFileTypesRx, '\1', '')
-                if exists('g:tcommentIgnoreTypes_'. a:filetype) && g:tcommentIgnoreTypes_{a:filetype} =~ '\<'.ft.'\>'
-                    let m = m + 1
-                else
-                    return s:GetCustomCommentString(ft, a:commentMode, cms)
-                endif
-            elseif syntaxName == '' || syntaxName == 'None' || syntaxName =~ '^\u\+$' || syntaxName =~ '^\u\U*$'
-                let m = m + 1
-            else
-                break
-            endif
-        endwh
-        let n = n + 1
-    endwh
-    return [cms, commentMode]
-endf
-
-function! s:CommentMode(commentMode, newmode) "{{{3
-    return substitute(a:commentMode, '\w\+', a:newmode, 'g')
-endf
-
-function! s:GuessCurrentCommentString(commentMode)
-    let valid_cms = (stridx(&commentstring, '%s') != -1)
-    if &commentstring != s:defaultCommentString && valid_cms
-        " The &commentstring appears to have been set and to be valid
-        return &commentstring
-    endif
-    if &comments != s:defaultComments
-        " the commentstring is the default one, so we assume that it wasn't 
-        " explicitly set; we then try to reconstruct &cms from &comments
-        let cms = s:ConstructFromComments(a:commentMode)
-        if cms != s:nullCommentString
-            return cms
-        endif
-    endif
-    if valid_cms
-        " Before &commentstring appeared not to be set. As we don't know 
-        " better we return it anyway if it is valid
-        return &commentstring
-    else
-        " &commentstring is invalid. So we return the identity string.
-        return s:nullCommentString
-    endif
-endf
-
-function! s:ConstructFromComments(commentMode)
-    exec s:ExtractCommentsPart('')
-    if a:commentMode =~# 'G' && line != ''
-        return line .' %s'
-    endif
-    exec s:ExtractCommentsPart('s')
-    if s != ''
-        exec s:ExtractCommentsPart('e')
-        " if a:commentMode
-        "     exec s:ExtractCommentsPart("m")
-        "     if m != ""
-        "         let m = "\n". m
-        "     endif
-        "     return s.'%s'.e.m
-        " else
-        return s.' %s '.e
-        " endif
-    endif
-    if line != ''
-        return line .' %s'
-    else
-        return s:nullCommentString
-    endif
-endf
-
-function! s:ExtractCommentsPart(key)
-    " let key   = a:key != "" ? a:key .'[^:]*' : ""
-    let key = a:key . '[bnflrxO0-9-]*'
-    let val = substitute(&comments, '^\(.\{-},\)\{-}'. key .':\([^,]\+\).*$', '\2', '')
-    if val == &comments
-        let val = ''
-    else
-        let val = substitute(val, '%', '%%', 'g')
-    endif
-    let var = a:key == '' ? 'line' : a:key
-    return 'let '. var .'="'. escape(val, '"') .'"'
-endf
-
-" s:GetCustomCommentString(ft, commentMode, ?default="")
-function! s:GetCustomCommentString(ft, commentMode, ...)
-    let commentMode   = a:commentMode
-    let customComment = exists('g:tcomment_'. a:ft)
-    if commentMode =~# 'B' && exists('g:tcomment_'. a:ft .'_block')
-        let cms = g:tcomment_{a:ft}_block
-    elseif commentMode =~? 'I' && exists('g:tcomment_'. a:ft .'_inline')
-        let cms = g:tcomment_{a:ft}_inline
-    elseif customComment
-        let cms = g:tcomment_{a:ft}
-        let commentMode = s:CommentMode(commentMode, 'G')
-    elseif a:0 >= 1
-        let cms = a:1
-        let commentMode = s:CommentMode(commentMode, 'G')
-    else
-        let cms = ''
-        let commentMode = s:CommentMode(commentMode, 'G')
-    endif
-    return [cms, commentMode]
-endf
-
-function! s:BlockGetCommentString(cms)
-    return substitute(a:cms, '\n.*$', '', '')
-endf
-
-function! s:BlockGetMiddleString(cms)
-    let rv = substitute(a:cms, '^.\{-}\n\([^\n]*\)', '\1', '')
-    return rv == a:cms ? '' : rv
-endf
-
 finish
 
 
@@ -847,3 +365,14 @@ syntax)
 - TComment: The use of the type argument has slightly changed (IG -> i, 
 new: >)
 
+1.8
+- Definitly require vim7
+- Split the plugin into autoload & plugin.
+- g:TCommentFileTypes is a list
+- Fixed some block comment strings
+- Removed extraneous newline in some block comments.
+- Maps for visal mode (thanks Krzysztof Goj)
+
+1.9
+- Fix left offset for inline comments (via operator binding)
+
diff --git a/vimfiles/plugin/vimballPlugin.vim b/vimfiles/plugin/vimballPlugin.vim
index 128f0d2..04d13ac 100644
--- a/vimfiles/plugin/vimballPlugin.vim
+++ b/vimfiles/plugin/vimballPlugin.vim
@@ -16,7 +16,7 @@
 if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballPlugin = "v25"
+let g:loaded_vimballPlugin = "v26"
 let s:keepcpo              = &cpo
 set cpo&vim
 
@@ -25,7 +25,7 @@ set cpo&vim
 com! -ra   -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
 com! -na=? -complete=dir  UseVimball  call vimball#Vimball(1,<f-args>)
 com! -na=0                VimballList call vimball#Vimball(0)
-com! -na=* -complete=dir  RmVimball   call vimball#RmVimball(<f-args>)
+com! -na=* -complete=dir  RmVimball   call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
 au BufEnter  *.vba.gz,*.vba.bz2,*.vba.zip call vimball#Decompress(expand("<amatch>"))
 au BufEnter  *.vba setlocal ff=unix noma bt=nofile fmr=[[[,]]] fdm=marker|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
 
diff --git a/vimfiles/syntax/netrw.vim b/vimfiles/syntax/netrw.vim
index 5e43293..1d9d328 100644
--- a/vimfiles/syntax/netrw.vim
+++ b/vimfiles/syntax/netrw.vim
@@ -1,103 +1,104 @@
-" Language   : Netrw Remote-Directory Listing Syntax
-" Maintainer : Charles E. Campbell, Jr.
-" Last change: Feb 06, 2008
-" Version    : 12
-" ---------------------------------------------------------------------
-
-" Syntax Clearing: {{{1
-if version < 600
- syntax clear
-elseif 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
-
-syn match  netrwSpecial		"\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)"		contains=netrwClassify
-syn match  netrwDir		"\.\{1,2}/"						contains=netrwClassify
-syn match  netrwDir		"\%(\S\+ \)*\S\+/"					contains=netrwClassify
-syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"			contains=netrwDateSep skipwhite nextgroup=netrwTime
-syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  			contains=netrwClassify
-syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" 			contains=netrwClassify
-syn match  netrwTreeBar		"^\%(| \)*"						contains=netrwTreeBarSpace	nextgroup=@netrwTreeGroup
-syn match  netrwTreeBarSpace	" "				contained
-
-syn match  netrwClassify	"[*=|@/]\ze\%(\s\{2,}\|$\)"	contained
-syn match  netrwDateSep		"/"				contained
-syn match  netrwTime		"\d\{1,2}:\d\{2}:\d\{2}"	contained		contains=netrwTimeSep
-syn match  netrwTimeSep		":"
-
-syn match  netrwComment		'".*\%(\t\|$\)'						contains=@NetrwGroup
-syn match  netrwHide		'^"\s*\(Hid\|Show\)ing:'	skipwhite nextgroup=netrwHidePat
-syn match  netrwSlash		"/"				contained
-syn match  netrwHidePat		"[^,]\+"			contained skipwhite nextgroup=netrwHideSep
-syn match  netrwHideSep		","				contained transparent skipwhite nextgroup=netrwHidePat
-syn match  netrwSortBy		"Sorted by"			contained transparent skipwhite nextgroup=netrwList
-syn match  netrwSortSeq		"Sort sequence:"		contained transparent skipwhite nextgroup=netrwList
-syn match  netrwCopyTgt		"Copy/Move Tgt:"		contained transparent skipwhite nextgroup=netrwList
-syn match  netrwList		".*$"				contained		contains=netrwComma
-syn match  netrwComma		","				contained
-syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$"	contains=netrwHelpCmd keepend contained
-syn match  netrwHelpCmd		"\S\ze:"			contained skipwhite nextgroup=netrwCmdSep
-syn match  netrwCmdSep		":"				contained nextgroup=netrwCmdNote
-syn match  netrwCmdNote		".\{-}\ze  "			contained
-syn match  netrwVersion		"(netrw.*)"			contained
-
-" -----------------------------
-" Special filetype highlighting {{{1
-" -----------------------------
-if exists("g:netrw_special_syntax") && netrw_special_syntax
- syn match netrwBak		"\(\S\+ \)*\S\+\.bak\>"				contains=netrwTreeBar
- syn match netrwCompress	"\(\S\+ \)*\S\+\.\%(gz\|bz2\|Z\|zip\)\>"	contains=netrwTreeBar
- syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar
- syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar
- syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar
- syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar
- syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar
- syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar
- syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar
- syn match netrwTilde		"\(\S\+ \)*\S\+\~\>"				contains=netrwTreeBar
- syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar
-endif
-
-" ---------------------------------------------------------------------
-" Highlighting Links: {{{1
-if !exists("did_drchip_netrwlist_syntax")
- let did_drchip_netrwlist_syntax= 1
- hi link netrwClassify	Function
- hi link netrwCmdSep	Delimiter
- hi link netrwComment	Comment
- hi link netrwDir	Directory
- hi link netrwHelpCmd	Function
- hi link netrwHidePat	Statement
- hi link netrwList	Statement
- hi link netrwVersion	Identifier
- hi link netrwSymLink	Question
- hi link netrwExe	PreProc
- hi link netrwDateSep	Delimiter
-
- hi link netrwTreeBar	Special
- hi link netrwTimeSep	netrwDateSep
- hi link netrwComma	netrwComment
- hi link netrwHide	netrwComment
- hi link netrwMarkFile	Identifier
-
- " special syntax highlighting (see :he g:netrw_special_syntax)
- hi link netrwBak	NonText
- hi link netrwCompress	Folded
- hi link netrwData	DiffChange
- hi link netrwLib	DiffChange
- hi link netrwMakefile	DiffChange
- hi link netrwObj	Folded
- hi link netrwTilde	Folded
- hi link netrwTmp	Folded
- hi link netrwTags	Folded
-endif
-
-" Current Syntax: {{{1
-let   b:current_syntax = "netrwlist"
-" ---------------------------------------------------------------------
-" vim: ts=8 fdm=marker
+" Language   : Netrw Remote-Directory Listing Syntax
+" Maintainer : Charles E. Campbell, Jr.
+" Last change: Aug 12, 2008
+" Version    : 14
+" ---------------------------------------------------------------------
+
+" Syntax Clearing: {{{1
+if version < 600
+ syntax clear
+elseif 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
+
+syn match  netrwSpecial		"\%(\S\+ \)*\S\+[*|=]\ze\%(\s\{2,}\|$\)"		contains=netrwClassify
+syn match  netrwDir		"\.\{1,2}/"						contains=netrwClassify
+syn match  netrwDir		"\%(\S\+ \)*\S\+/"					contains=netrwClassify
+syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"			contains=netrwDateSep skipwhite nextgroup=netrwTime
+syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  			contains=netrwClassify
+syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" 			contains=netrwClassify
+syn match  netrwTreeBar		"^\%(| \)*"						contains=netrwTreeBarSpace	nextgroup=@netrwTreeGroup
+syn match  netrwTreeBarSpace	" "				contained
+
+syn match  netrwClassify	"[*=|@/]\ze\%(\s\{2,}\|$\)"	contained
+syn match  netrwDateSep		"/"				contained
+syn match  netrwTime		"\d\{1,2}:\d\{2}:\d\{2}"	contained		contains=netrwTimeSep
+syn match  netrwTimeSep		":"
+
+syn match  netrwComment		'".*\%(\t\|$\)'						contains=@NetrwGroup
+syn match  netrwHide		'^"\s*\(Hid\|Show\)ing:'	skipwhite nextgroup=netrwHidePat
+syn match  netrwSlash		"/"				contained
+syn match  netrwHidePat		"[^,]\+"			contained skipwhite nextgroup=netrwHideSep
+syn match  netrwHideSep		","				contained skipwhite nextgroup=netrwHidePat
+syn match  netrwSortBy		"Sorted by"			contained transparent skipwhite nextgroup=netrwList
+syn match  netrwSortSeq		"Sort sequence:"		contained transparent skipwhite nextgroup=netrwList
+syn match  netrwCopyTgt		"Copy/Move Tgt:"		contained transparent skipwhite nextgroup=netrwList
+syn match  netrwList		".*$"				contained		contains=netrwComma
+syn match  netrwComma		","				contained
+syn region netrwQuickHelp	matchgroup=Comment start="Quick Help:\s\+" end="$"	contains=netrwHelpCmd keepend contained
+syn match  netrwHelpCmd		"\S\ze:"			contained skipwhite nextgroup=netrwCmdSep
+syn match  netrwCmdSep		":"				contained nextgroup=netrwCmdNote
+syn match  netrwCmdNote		".\{-}\ze  "			contained
+syn match  netrwVersion		"(netrw.*)"			contained
+
+" -----------------------------
+" Special filetype highlighting {{{1
+" -----------------------------
+if exists("g:netrw_special_syntax") && netrw_special_syntax
+ syn match netrwBak		"\(\S\+ \)*\S\+\.bak\>"				contains=netrwTreeBar
+ syn match netrwCompress	"\(\S\+ \)*\S\+\.\%(gz\|bz2\|Z\|zip\)\>"	contains=netrwTreeBar
+ syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar
+ syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar
+ syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar
+ syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar
+ syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar
+ syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar
+ syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar
+ syn match netrwTilde		"\(\S\+ \)*\S\+\~\>"				contains=netrwTreeBar
+ syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar
+endif
+
+" ---------------------------------------------------------------------
+" Highlighting Links: {{{1
+if !exists("did_drchip_netrwlist_syntax")
+ let did_drchip_netrwlist_syntax= 1
+ hi default link netrwClassify	Function
+ hi default link netrwCmdSep	Delimiter
+ hi default link netrwComment	Comment
+ hi default link netrwDir	Directory
+ hi default link netrwHelpCmd	Function
+ hi default link netrwHidePat	Statement
+ hi default link netrwHideSep	netrwComment
+ hi default link netrwList	Statement
+ hi default link netrwVersion	Identifier
+ hi default link netrwSymLink	Question
+ hi default link netrwExe	PreProc
+ hi default link netrwDateSep	Delimiter
+
+ hi default link netrwTreeBar	Special
+ hi default link netrwTimeSep	netrwDateSep
+ hi default link netrwComma	netrwComment
+ hi default link netrwHide	netrwComment
+ hi default link netrwMarkFile	Identifier
+
+ " special syntax highlighting (see :he g:netrw_special_syntax)
+ hi default link netrwBak	NonText
+ hi default link netrwCompress	Folded
+ hi default link netrwData	DiffChange
+ hi default link netrwLib	DiffChange
+ hi default link netrwMakefile	DiffChange
+ hi default link netrwObj	Folded
+ hi default link netrwTilde	Folded
+ hi default link netrwTmp	Folded
+ hi default link netrwTags	Folded
+endif
+
+" Current Syntax: {{{1
+let   b:current_syntax = "netrwlist"
+" ---------------------------------------------------------------------
+" vim: ts=8 fdm=marker