summaryrefslogtreecommitdiff
path: root/runtime/plugin/netrw.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/plugin/netrw.vim')
-rw-r--r--runtime/plugin/netrw.vim2038
1 files changed, 1031 insertions, 1007 deletions
diff --git a/runtime/plugin/netrw.vim b/runtime/plugin/netrw.vim
index fdb6d2793..60dec437f 100644
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1,18 +1,18 @@
-" netrw.vim: (global plugin) Handles file transfer across a network
-" Last Change: Jun 18, 2004
+" netrw.vim: Handles file transfer and remote directory listing across a network
+" Last Change: Jun 24, 2004
" Maintainer: Charles E. Campbell, Jr. PhD <drchipNOSPAM at campbellfamily.biz>
-" Version: 46
+" Version: 47c NOT RELEASED
" License: Vim License (see vim's :help license)
"
" But be doers of the word, and not only hearers, deluding your own selves
" (James 1:22 RSV)
" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-" Exit quickly when already loaded or when 'compatible' is set.
+" Exit quickly when already loaded or when 'compatible' is set. {{{1
if exists("loaded_netrw") || &cp
finish
endif
-let loaded_netrw = "v46"
+let loaded_netrw = "v47c"
let s:save_cpo = &cpo
set cpo&vim
@@ -70,7 +70,7 @@ if !exists("g:netrw_fetch_cmd")
endif
if !exists("g:netrw_list_cmd")
if executable("ssh")
- let g:netrw_list_cmd= "ssh HOSTNAME ls -Fa"
+ let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa"
else
" call Decho("ssh is not executable, can't do netlist")
let g:netrw_list_cmd= ""
@@ -104,13 +104,13 @@ if version >= 600
augroup Network
au!
if has("win32")
- au BufReadCmd file://* exe "doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
+ au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
else
- au BufReadCmd file:///* exe "doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
- au BufReadCmd file://localhost/* exe "doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "doau BufReadPost ".expand("<afile>")
+ au BufReadCmd file:///* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
+ au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
endif
- au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "doau BufReadPost ".expand("<afile>")
- au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "doau BufReadPre ".expand("<afile>")|exe "Nread " .expand("<afile>")|exe "doau BufReadPost ".expand("<afile>")
+ au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
+ au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread " .expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "Nwrite " .expand("<afile>")|call <SID>NetRestorePosn()
augroup END
endif
@@ -160,729 +160,736 @@ endfun
" ------------------------------------------------------------------------
" NetRead: responsible for reading a file over the net {{{1
fun! s:NetRead(...)
-" call Dfunc("NetRead(a:1<".a:1.">)")
-
- " save options
- call s:NetOptionSave()
-
- " Special Exception: if a file is named "0r", then
- " "0r" will be used to read the
- " following files instead of "r"
- if a:0 == 0
- let readcmd= "r"
- let ichoice= 0
- elseif a:1 == "0r"
- let readcmd = "0r"
- let ichoice = 2
- else
- let readcmd = "r"
- let ichoice = 1
- endif
-
- " get name of a temporary file
- let tmpfile= tempname()
-
-" call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
- 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
-
+" call Dfunc("NetRead(a:1<".a:1.">)")
+
+ " save options
+ call s:NetOptionSave()
+
+ " Special Exception: if a file is named "0r", then
+ " "0r" will be used to read the
+ " following files instead of "r"
+ if a:0 == 0
+ let readcmd= "r"
+ let ichoice= 0
+ elseif a:1 == "0r"
+ let readcmd = "0r"
+ let ichoice = 2
else
- exe "let choice= a:" . ichoice
-" call Decho("no lastfile: choice<" . choice . ">")
-
- " Reconstruct Choice if choice starts with '"'
- if match(choice,"?") == 0
- echo 'NetRead Usage:'
- echo ':Nread machine:path uses rcp'
- echo ':Nread "machine path" uses ftp with <.netrc>'
- echo ':Nread "machine id password path" uses ftp'
- echo ':Nread dav://machine[:port]/path uses cadaver'
- echo ':Nread fetch://machine/path uses fetch'
- echo ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>'
- echo ':Nread http://[user@]machine/path uses http wget'
- echo ':Nread rcp://[user@]machine/path uses rcp'
- echo ':Nread rsync://machine[:port]/path uses rsync'
- echo ':Nread scp://[user@]machine[[:#]port]/path uses scp'
- echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
- break
- elseif match(choice,"^\"") != -1
-" 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
- echoerr "Unbalanced string in filename '". wholechoice ."'"
-" call Dret("NetRead")
- 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
-
- " fix up windows urls
- if has("win32")
- let choice = substitute(choice,'\\','/','ge')
-" call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
- exe 'lcd ' . fnamemodify(tmpfile,':h')
- let tmpfile = fnamemodify(tmpfile,':t')
+ let readcmd = "r"
+ let ichoice = 1
endif
-
- " Determine method of read (ftp, rcp, etc)
- call s:NetMethod(choice)
-
- " Check if NetList() should be handling this request
-" call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
- if choice =~ "^.*/$"
- if strlen(g:netrw_list_cmd) > 0
- call s:NetList(choice)
-" call Dret("NetRead")
+
+ " get name of a temporary file
+ let tmpfile= tempname()
+
+" call Decho("ichoice=".ichoice." readcmd<".readcmd.">")
+ 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
- echoerr "sorry, can't do a remote listing; ssh isn't executable"
+ exe "let choice= a:" . ichoice
+" call Decho("no lastfile: choice<" . choice . ">")
+
+ " Reconstruct Choice if choice starts with '"'
+ if match(choice,"?") == 0
+ echo 'NetRead Usage:'
+ echo ':Nread machine:path uses rcp'
+ echo ':Nread "machine path" uses ftp with <.netrc>'
+ echo ':Nread "machine id password path" uses ftp'
+ echo ':Nread dav://machine[:port]/path uses cadaver'
+ echo ':Nread fetch://machine/path uses fetch'
+ echo ':Nread ftp://[user@]machine[:port]/path uses ftp autodetects <.netrc>'
+ echo ':Nread http://[user@]machine/path uses http wget'
+ echo ':Nread rcp://[user@]machine/path uses rcp'
+ echo ':Nread rsync://machine[:port]/path uses rsync'
+ echo ':Nread scp://[user@]machine[[:#]port]/path uses scp'
+ echo ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+ break
+ elseif match(choice,"^\"") != -1
+" 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
+ echoerr "Unbalanced string in filename '". wholechoice ."'"
+" call Dret("NetRead")
+ return
+ endif
+ let choice= a:{ichoice}
+ endwhile
+ let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+ endif
+ endif
endif
- return
- endif
- " ============
- " Perform Read
- " ============
+" call Decho("choice<" . choice . ">")
+ let ichoice= ichoice + 1
+
+ " fix up windows urls
+ if has("win32")
+ let choice = substitute(choice,'\\','/','ge')
+" call Decho("fixing up windows url to <".choice."> tmpfile<".tmpfile)
- ".........................................
- " rcp: NetRead Method #1
- if b:netrw_method == 1 " read with rcp
-" call Decho("read via rcp (method #1)")
- " ER: noting 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
+ exe 'lcd ' . fnamemodify(tmpfile,':h')
+ let tmpfile = fnamemodify(tmpfile,':t')
endif
- else
- if exists("g:netrw_uid") && ( g:netrw_uid != "" )
- let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+
+ " Determine method of read (ftp, rcp, etc)
+ call s:NetMethod(choice)
+
+ " Check if NetList() should be handling this request
+" call Decho("checking if netlist: choice<".choice."> netrw_list_cmd<".g:netrw_list_cmd.">")
+ if choice =~ "^.*/$"
+ if strlen(g:netrw_list_cmd) > 0
+ keepjumps call s:NetList(choice)
+" call Dret("NetRead")
+ else
+ echoerr "sorry, can't do a remote listing; ssh isn't executable"
+ endif
+ return
+ endif
+
+ " ============
+ " Perform Read
+ " ============
+
+ ".........................................
+ " rcp: NetRead Method #1
+ if b:netrw_method == 1 " read with rcp
+" call Decho("read via rcp (method #1)")
+ " ER: noting 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
- let uid_machine = g:netrw_machine
+ 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
- endif
-" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
- exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
- let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
- let b:netrw_lastfile = choice
-
- ".........................................
- " ftp + <.netrc>: NetRead Method #2
- elseif b:netrw_method == 2 " read with ftp + <.netrc>
-" call Decho("read via ftp+.netrc (method #2)")
+" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".uid_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + <.netrc>: NetRead Method #2
+ elseif b:netrw_method == 2 " read with ftp + <.netrc>
+" call Decho("read via ftp+.netrc (method #2)")
+ let netrw_fname= b:netrw_fname
+ new
+ set ff=unix
+ exe "put ='".g:netrw_ftpmode."'"
+ exe "put ='get ".netrw_fname." ".tmpfile."'"
+ 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) !~ "^$"
+ echoerr getline(1)
+ endif
+ bd!
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + machine,id,passwd,filename: NetRead Method #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= b:netrw_fname
new
set ff=unix
- exe "put ='".g:netrw_ftpmode."'"
- exe "put ='get ".netrw_fname." ".tmpfile."'"
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
+ put ='open '.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
+ put ='open '.g:netrw_machine
endif
+
+ if exists("g:netrw_ftp") && g:netrw_ftp == 1
+ put =g:netrw_uid
+ put =g:netrw_passwd
+ else
+ put ='user '.g:netrw_uid.' '.g:netrw_passwd
+ endif
+
+ if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+ put =g:netrw_ftpmode
+ endif
+ put ='get '.netrw_fname.' '.tmpfile
+
+ " 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('performing ftp -i -n')
+ 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) !~ "^$"
echoerr getline(1)
endif
bd!
- let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
let b:netrw_lastfile = choice
-
- ".........................................
- " ftp + machine,id,passwd,filename: NetRead Method #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= b:netrw_fname
- new
- set 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 =g:netrw_passwd
- else
+
+ ".........................................
+ " scp: NetRead Method #4
+ 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= " -P ".g:netrw_port
+ else
+ let useport= ""
+ endif
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+ else
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ endif
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ elseif b:netrw_method == 5 " read with http (wget)
+" call Decho("read via http (method #5)")
+ if g:netrw_http_cmd == ""
+ echoerr "neither wget nor fetch command is available"
+ exit
+ endif
+
+ if match(b:netrw_fname,"#") == -1
+ " simple wget
+" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+
+ else
+ " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
+ 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("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
+ exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
+ let result = s:NetGetFile(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
+
+ ".........................................
+ " cadaver: NetRead Method #6
+ elseif b:netrw_method == 6 " read with cadaver
+" call Decho("read via cadaver (method #6)")
+
+ " Construct execution string (four lines) which will be passed through filter
+ let netrw_fname= b:netrw_fname
+ new
+ set 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.' '.g:netrw_passwd
+
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+ put ='get '.netrw_fname.' '.cygtmpfile
+ else
+ put ='get '.netrw_fname.' '.tmpfile
+ endif
+
+ " perform cadaver operation:
+ norm 1Gdd
+" call Decho("executing: %!".g:netrw_dav_cmd)
+ exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
+ bd!
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " rsync: NetRead Method #7
+ elseif b:netrw_method == 7 " read with rsync
+" call Decho("read via rsync (method #7)")
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+ else
+" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ endif
+ let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " fetch: NetRead Method #8
+ " fetch://[user@]host[:http]/path
+ elseif b:netrw_method == 8 " read with fetch
+ if g:netrw_fetch_cmd == ""
+ echoerr "fetch command not available"
+ exit
+ 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("g:netrw_passwd") && g:netrw_passwd != ""
+" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+ else
+" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
+ endif
+
+ let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " sftp: NetRead Method #9
+ elseif b:netrw_method == 9 " read with sftp
+" call Decho("read via sftp (method #4)")
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
+ exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
+ else
+" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
+ exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
+ endif
+ let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ else " Complain
+ echo "***warning*** unable to comply with your request<" . choice . ">"
endif
-
- if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
- put =g:netrw_ftpmode
- endif
- put ='get '.netrw_fname.' '.tmpfile
-
- " 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('performing ftp -i -n')
- 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) !~ "^$"
- echoerr getline(1)
- endif
- bd!
- let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
- let b:netrw_lastfile = choice
-
- ".........................................
- " scp: NetRead Method #4
- 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= " -P ".g:netrw_port
- else
- let useport= ""
- endif
- if g:netrw_cygwin == 1
- let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
- exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
- else
-" call Decho("executing: !".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
- exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
- endif
- let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
- let b:netrw_lastfile = choice
-
- ".........................................
- elseif b:netrw_method == 5 " read with http (wget)
-" call Decho("read via http (method #5)")
- if g:netrw_http_cmd == ""
- echoerr "neither wget nor fetch command is available"
- exit
- endif
-
- if match(b:netrw_fname,"#") == -1
- " simple wget
-" call Decho("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.escape(b:netrw_fname,' ?&')
- let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
-
- else
- " wget plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
- 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("executing: !".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html)
- exe g:netrw_silentxfer."!".g:netrw_http_cmd." ".tmpfile." http://".g:netrw_machine.netrw_html
- let result = s:NetGetFile(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
-
- ".........................................
- " cadaver: NetRead Method #6
- elseif b:netrw_method == 6 " read with cadaver
-" call Decho("read via cadaver (method #6)")
-
- " Construct execution string (four lines) which will be passed through filter
- let netrw_fname= b:netrw_fname
- new
- set 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.' '.g:netrw_passwd
-
- if g:netrw_cygwin == 1
- let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
- put ='get '.netrw_fname.' '.cygtmpfile
- else
- put ='get '.netrw_fname.' '.tmpfile
- endif
-
- " perform cadaver operation:
- norm 1Gdd
-" call Decho("executing: %!".g:netrw_dav_cmd)
- exe g:netrw_silentxfer."%!".g:netrw_dav_cmd
- bd!
- let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
- let b:netrw_lastfile = choice
-
- ".........................................
- " rsync: NetRead Method #7
- elseif b:netrw_method == 7 " read with rsync
-" call Decho("read via rsync (method #7)")
- if g:netrw_cygwin == 1
- let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
- exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
- else
-" call Decho("executing: !".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
- exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
- endif
- let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
- let b:netrw_lastfile = choice
-
- ".........................................
- " fetch: NetRead Method #8
- " fetch://[user@]host[:http]/path
- elseif b:netrw_method == 8 " read with fetch
- if g:netrw_fetch_cmd == ""
- echoerr "fetch command not available"
- exit
- 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("g:netrw_passwd") && g:netrw_passwd != ""
-" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_uid.':'.g:netrw_passwd.'@'.g:netrw_machine."/".escape(b:netrw_fname,' ?&')
- else
-" call Decho("executing: !".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_fetch_cmd." ".tmpfile." ".netrw_option."://".g:netrw_machine."/".escape(b:netrw_fname,' ?&')
- endif
-
- let result = s:NetGetFile(readcmd,tmpfile, b:netrw_method)
- let b:netrw_lastfile = choice
-
- ".........................................
- " sftp: NetRead Method #9
- elseif b:netrw_method == 9 " read with sftp
-" call Decho("read via sftp (method #4)")
- if g:netrw_cygwin == 1
- let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-" call Decho("!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
-" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile)
- exe "!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".cygtmpfile
- else
-" call Decho("executing: !".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile)
- exe g:netrw_silentxfer."!".g:netrw_sftp_cmd." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')." ".tmpfile
- endif
- let result = s:NetGetFile(readcmd, tmpfile, b:netrw_method)
- let b:netrw_lastfile = choice
-
- ".........................................
- else " Complain
- echo "***warning*** unable to comply with your request<" . choice . ">"
+ endwhile
+
+ " cleanup
+" call Decho("cleanup")
+ if exists("b:netrw_method")
+ unlet b:netrw_method
+ unlet g:netrw_machine
+ unlet b:netrw_fname
endif
- endwhile
-
- " cleanup
-" call Decho("cleanup")
- if exists("b:netrw_method")
- unlet b:netrw_method
- unlet g:netrw_machine
- unlet b:netrw_fname
- endif
- call s:NetOptionRestore()
-
-" call Dret("NetRead")
+ call s:NetOptionRestore()
+
+" call Dret("NetRead")
endfun
" end of NetRead
" ------------------------------------------------------------------------
" NetGetFile: Function to read file "fname" with command "readcmd". {{{1
fun! s:NetGetFile(readcmd, fname, method)
-"" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
-
- if exists("*NetReadFixup")
- " for the use of NetReadFixup (not otherwise used internally)
- let line2= line("$")
- endif
-
- " transform paths from / to \ for Windows, unless the shell is bash
- if &term == "win32"
- if &shell == "bash"
- let fname=a:fname
-"" call Decho("(win32 && bash) fname<".fname.">")
- else
- let fname=substitute(a:fname,'/','\\\\','ge')
-"" call Decho("(win32 && !bash) fname<".fname.">")
+" call Dfunc("NetGetFile(readcmd<".a:readcmd.">,fname<".a:fname."> method<".a:method.">)")
+
+ if exists("*NetReadFixup")
+ " for the use of NetReadFixup (not otherwise used internally)
+ let line2= line("$")
endif
- else
- let fname= a:fname
-"" call Decho("(copied) fname<".fname.">")
- endif
-
- " get the file, but disable undo when reading a new buffer
- if a:readcmd[0] == '0'
- let use_e_cmd = 0 " 1 when using ':edit'
- let delline = 0 " 1 when have to delete empty last line
- if line("$") == 1 && getline(1) == ""
- " Now being asked to 0r a file into an empty file.
- " Safe to :e it instead, unless there is another window on the same buffer.
- let curbufnr = bufnr("%")
- let use_e_cmd = 1
- let delline = 1
- " Loop over all windows,
- " reset use_e_cmd when another one is editing the current buffer.
- let i = 1
- while 1
- if i != winnr() && winbufnr(i) == curbufnr
- let use_e_cmd = 0
- break
- endif
- let i = i + 1
- if winbufnr(i) < 0
- break
- endif
- endwhile
+
+ " transform paths from / to \ for Windows, unless the shell is bash
+ if &term == "win32"
+ if &shell == "bash"
+ let fname=a:fname
+" call Decho("(win32 && bash) fname<".fname.">")
+ else
+ let fname=substitute(a:fname,'/','\\\\','ge')
+" call Decho("(win32 && !bash) fname<".fname.">")
+ endif
+ else
+ let fname= a:fname
+" call Decho("(copied) fname<".fname.">")
endif
-
- if use_e_cmd > 0
- " ':edit' the temp file, wipe out the old buffer and rename the buffer
- let curfilename = expand("%")
-
- let binlocal = &l:bin
- let binglobal = &g:bin
- if binlocal
- setglobal bin " Need to set 'bin' globally for ":e" command.
+
+ " get the file, but disable undo when reading a new buffer
+ if a:readcmd[0] == '0'
+ let use_e_cmd = 0 " 1 when using ':edit'
+ let delline = 0 " 1 when have to delete empty last line
+ if line("$") == 1 && getline(1) == ""
+ " Now being asked to 0r a file into an empty file.
+ " Safe to :e it instead, unless there is another window on the same buffer.
+ let curbufnr = bufnr("%")
+ let use_e_cmd = 1
+ let delline = 1
+ " Loop over all windows,
+ " reset use_e_cmd when another one is editing the current buffer.
+ let i = 1
+ while 1
+ if i != winnr() && winbufnr(i) == curbufnr
+ let use_e_cmd = 0
+ break
+ endif
+ let i = i + 1
+ if winbufnr(i) < 0
+ break
+ endif
+ endwhile
endif
- silent exe "e! ".v:cmdarg." ".fname
- if binlocal && !binglobal
- setglobal nobin
- setlocal bin
+
+ if use_e_cmd > 0
+ " ':edit' the temp file, wipe out the old buffer and rename the buffer
+ let curfilename = expand("%")
+
+ let binlocal = &l:bin
+ let binglobal = &g:bin
+ if binlocal
+ setglobal bin " Need to set 'bin' globally for ":e" command.
+ endif
+ silent exe "e! ".v:cmdarg." ".fname
+ if binlocal && !binglobal
+ setglobal nobin
+ setlocal bin
+ endif
+
+ exe curbufnr . "bwipe!"
+ exe "f ".curfilename
+ " the ":f newname" apparently leaves the temporary file as the alternate
+ " file in the buffer list (see :ls!). The following command wipes it out.
+ exe bufnr("#")."bwipe!"
+ else
+ let oldul= &ul
+ set ul=-1
+ exe a:readcmd." ".v:cmdarg." ".fname
+ if delline > 0
+ " wipe out last line, which should be a blank line anyway
+ $del
+ endif
+ let &ul= oldul
endif
-
- exe curbufnr . "bwipe!"
- exe "f ".curfilename
- " the ":f newname" apparently leaves the temporary file as the alternate
- " file in the buffer list (see :ls!). The following command wipes it out.
- exe bufnr("#")."bwipe!"
- else
- let oldul= &ul
- set ul=-1
+ elseif filereadable(fname)
+" call Decho("exe<".a:readcmd." ".v:cmdarg." ".fname.">")
exe a:readcmd." ".v:cmdarg." ".fname
- if delline > 0
- " wipe out last line, which should be a blank line anyway
- $del
- endif
- let &ul= oldul
- endif
- else
- exe a:readcmd." ".v:cmdarg." ".fname
- endif
-
- " User-provided (ie. optional) fix-it-up command
- if exists("*NetReadFixup")
- let line1= line(".")
- if a:readcmd == "r"
- let line2= line("$") - line2 + line1
else
- let line2= line("$") - line2
+" call Dret("NetGetFile")
+ return
endif
-"" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
- call NetReadFixup(a:method, line1, line2)
- endif
-"" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
-
-" insure that we have the right filetype and that its being displayed
- filetype detect
- redraw!
-"" call Dret("NetGetFile")
+
+ " User-provided (ie. optional) fix-it-up command
+ if exists("*NetReadFixup")
+ let line1= line(".")
+ if a:readcmd == "r"
+ let line2= line("$") - line2 + line1
+ else
+ let line2= line("$") - line2
+ endif
+" call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+ call NetReadFixup(a:method, line1, line2)
+ endif
+
+" call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname))
+
+ " insure that we have the right filetype and that its being displayed
+ filetype detect
+ redraw!
+" call Dret("NetGetFile")
endfun
" ------------------------------------------------------------------------
" NetWrite: responsible for writing a file over the net {{{1
fun! s:NetWrite(...) range
-"" call Dfunc("NetWrite(a:0=".a:0.")")
-
- " option handling
- let mod= 0
- call s:NetOptionSave()
-
- " Get Temporary Filename
- let tmpfile= tempname()
-
- if a:0 == 0
- let ichoice = 0
- else
- let ichoice = 1
- endif
-
- " write (selected portion of) file to temporary
- silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
-
- 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
+" call Dfunc("NetWrite(a:0=".a:0.")")
+
+ " option handling
+ let mod= 0
+ call s:NetOptionSave()
+
+ " Get Temporary Filename
+ let tmpfile= tempname()
+
+ if a:0 == 0
+ let ichoice = 0
else
- exe "let choice= a:" . ichoice
-
- " Reconstruct Choice if choice starts with '"'
- if match(choice,"?") == 0
- echo 'NetWrite Usage:"'
- echo ':Nwrite machine:path uses rcp'
- echo ':Nwrite "machine path" uses ftp with <.netrc>'
- echo ':Nwrite "machine id password path" uses ftp'
- echo ':Nwrite dav://[user@]machine/path uses cadaver'
- echo ':Nwrite fetch://[user@]machine/path uses fetch'
- echo ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)'
- echo ':Nwrite rcp://machine/path uses rcp'
- echo ':Nwrite rsync://[user@]machine/path uses rsync'
- echo ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
- echo ':Nwrite sftp://[user@]machine/path uses sftp'
- 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
- echoerr "Unbalanced string in filename '". wholechoice ."'"
-"" call Dret("NetWrite")
- return
- endif
- let choice= a:{ichoice}
- endwhile
- let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+ let ichoice = 1
+ endif
+
+ " write (selected portion of) file to temporary
+ silent exe a:firstline."," . a:lastline . "w! ".v:cmdarg." ".tmpfile
+
+ 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
+
+ " Reconstruct Choice if choice starts with '"'
+ if match(choice,"?") == 0
+ echo 'NetWrite Usage:"'
+ echo ':Nwrite machine:path uses rcp'
+ echo ':Nwrite "machine path" uses ftp with <.netrc>'
+ echo ':Nwrite "machine id password path" uses ftp'
+ echo ':Nwrite dav://[user@]machine/path uses cadaver'
+ echo ':Nwrite fetch://[user@]machine/path uses fetch'
+ echo ':Nwrite ftp://machine[#port]/path uses ftp (autodetects <.netrc>)'
+ echo ':Nwrite rcp://machine/path uses rcp'
+ echo ':Nwrite rsync://[user@]machine/path uses rsync'
+ echo ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
+ echo ':Nwrite sftp://[user@]machine/path uses sftp'
+ 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
+ echoerr "Unbalanced string in filename '". wholechoice ."'"
+" call Dret("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
- endif
-"" call Decho("choice<" . choice . ">")
- let ichoice= ichoice + 1
-
- " fix up windows urls
- if has("win32")
- let choice= substitute(choice,'\\','/','ge')
- "ER: see NetRead()
- exe 'lcd ' . fnamemodify(tmpfile,':h')
- let tmpfile = fnamemodify(tmpfile,':t')
- endif
-
- " Determine method of read (ftp, rcp, etc)
- call s:NetMethod(choice)
-
- " =============
- " Perform Write
- " =============
-
- ".........................................
- " rcp: NetWrite Method #1
- if b:netrw_method == 1 " write with rcp
-"" 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
+" call Decho("choice<" . choice . ">")
+ let ichoice= ichoice + 1
+
+ " fix up windows urls
+ if has("win32")
+ let choice= substitute(choice,'\\','/','ge')
+ "ER: see NetRead()
+ exe 'lcd ' . fnamemodify(tmpfile,':h')
+ let tmpfile = fnamemodify(tmpfile,':t')
+ endif
+
+ " Determine method of read (ftp, rcp, etc)
+ call s:NetMethod(choice)
+
+ " =============
+ " Perform Write
+ " =============
+
+ ".........................................
+ " rcp: NetWrite Method #1
+ if b:netrw_method == 1 " write with rcp
+" 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
- let uid_machine = g:netrw_machine .'.'. $USERNAME
+ 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
- else
+" call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + <.netrc>: NetWrite Method #2
+ elseif b:netrw_method == 2 " write with ftp + <.netrc>
+ let netrw_fname = b:netrw_fname
+ new
+ set ff=unix
+ exe "put ='".g:netrw_ftpmode."'"
+" call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
+ exe "put ='put ".tmpfile." ".netrw_fname."'"
+" call Decho("put ='put ".tmpfile." ".netrw_fname."'")
+ 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) !~ "^$"
+ echoerr getline(1)
+ let mod=1
+ endif
+ bd!
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " ftp + machine, id, passwd, filename: NetWrite Method #3
+ elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname
+ let netrw_fname= b:netrw_fname
+ new
+ set 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 =g:netrw_passwd
+ else
+ put ='user '.g:netrw_uid.' '.g:netrw_passwd
+ endif
+ put ='put '.tmpfile.' '.netrw_fname
+ " 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
+" call Decho('performing ftp -i -n')
+ 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) !~ "^$"
+ echoerr getline(1)
+ let mod=1
+ endif
+ bd!
+
+ ".........................................
+ " scp: NetWrite Method #4
+ elseif b:netrw_method == 4 " write with scp
+ if exists("g:netrw_port") && g:netrw_port != ""
+ let useport= " -P ".g:netrw_port
+ else
+ let useport= ""
+ endif
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ else
+" call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ endif
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " http: NetWrite Method #5
+ elseif b:netrw_method == 5
+ echoerr "***warning*** currently <netrw.vim> does not support writing using http:"
+
+ ".........................................
+ " dav: NetWrite Method #6
+ elseif b:netrw_method == 6 " write with cadaver
+" call Decho("write via cadaver (method #6)")
+
+ " Construct execution string (four lines) which will be passed through filter
+ let netrw_fname= b:netrw_fname
+ new
+ set 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.' '.g:netrw_passwd
+
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+ put ='put '.cygtmpfile.' '.netrw_fname
+ else
+ put ='put '.tmpfile.' '.netrw_fname
+ endif
+
+ " 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
+ elseif b:netrw_method == 7 " write with rsync
+ if g:netrw_cygwin == 1
+ let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
+" call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ else
+" call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
+ exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
+ endif
+ let b:netrw_lastfile = choice
+
+ ".........................................
+ " scp: NetWrite Method #9
+ elseif b:netrw_method == 9 " write with sftp
+ let netrw_fname= b:netrw_fname
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." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".tmpfile." ".uid_machine.":".escape(b:netrw_fname,' ?&')
- let b:netrw_lastfile = choice
-
- ".........................................
- " ftp + <.netrc>: NetWrite Method #2
- elseif b:netrw_method == 2 " write with ftp + <.netrc>
- let netrw_fname = b:netrw_fname
- new
- set ff=unix
- exe "put ='".g:netrw_ftpmode."'"
-"" call Decho(" NetWrite: put ='".g:netrw_ftpmode."'")
- exe "put ='put ".tmpfile." ".netrw_fname."'"
-"" call Decho("put ='put ".tmpfile." ".netrw_fname."'")
- 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) !~ "^$"
- echoerr getline(1)
- let mod=1
- endif
- bd!
- let b:netrw_lastfile = choice
-
- ".........................................
- " ftp + machine, id, passwd, filename: NetWrite Method #3
- elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname
- let netrw_fname= b:netrw_fname
- new
- set 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 =g:netrw_passwd
- else
- put ='user '.g:netrw_uid.' '.g:netrw_passwd
- endif
- put ='put '.tmpfile.' '.netrw_fname
- " 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
-"" call Decho('performing ftp -i -n')
- 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) !~ "^$"
- echoerr getline(1)
- let mod=1
- endif
- bd!
-
- ".........................................
- " scp: NetWrite Method #4
- elseif b:netrw_method == 4 " write with scp
- if exists("g:netrw_port") && g:netrw_port != ""
- let useport= " -P ".g:netrw_port
- else
- let useport= ""
- endif
- if g:netrw_cygwin == 1
- let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"" call Decho("executing: !".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
- else
-"" call Decho("executing: !".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
- endif
- let b:netrw_lastfile = choice
-
- ".........................................
- " http: NetWrite Method #5
- elseif b:netrw_method == 5
- echoerr "***warning*** currently <netrw.vim> does not support writing using http:"
-
- ".........................................
- " dav: NetWrite Method #6
- elseif b:netrw_method == 6 " write with cadaver
-"" call Decho("write via cadaver (method #6)")
-
- " Construct execution string (four lines) which will be passed through filter
- let netrw_fname= b:netrw_fname
- new
- set 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.' '.g:netrw_passwd
-
- if g:netrw_cygwin == 1
- let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
- put ='put '.cygtmpfile.' '.netrw_fname
- else
+ new
+ set ff=unix
put ='put '.tmpfile.' '.netrw_fname
+ 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
+
+ ".........................................
+ else " Complain
+ echo "***warning*** unable to comply with your request<" . choice . ">"
endif
-
- " 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
- elseif b:netrw_method == 7 " write with rsync
- if g:netrw_cygwin == 1
- let cygtmpfile=substitute(tmpfile,'^\(\a\):','/cygdrive/\1/','e')
-"" call Decho("executing: !".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".cygtmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
- else
-"" call Decho("executing: !".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&'))
- exe g:netrw_silentxfer."!".g:netrw_rsync_cmd." ".tmpfile." ".g:netrw_machine.":".escape(b:netrw_fname,' ?&')
- endif
- let b:netrw_lastfile = choice
-
- ".........................................
- " scp: NetWrite Method #9
- elseif b:netrw_method == 9 " write with sftp
- let netrw_fname= b:netrw_fname
- 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
- set ff=unix
- put ='put '.tmpfile.' '.netrw_fname
- 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
-
- ".........................................
- else " Complain
- echo "***warning*** unable to comply with your request<" . choice . ">"
+ endwhile
+
+ " cleanup
+" call Decho("cleanup")
+ let result=delete(tmpfile)
+ call s:NetOptionRestore()
+
+ if a:firstline == 1 && a:lastline == line("$")
+ let &mod= mod " usually equivalent to set nomod
endif
- endwhile
-
- " cleanup
-"" call Decho("cleanup")
- let result=delete(tmpfile)
- call s:NetOptionRestore()
-
- if a:firstline == 1 && a:lastline == line("$")
- let &mod= mod " usually equivalent to set nomod
- endif
-
-"" call Dret("NetWrite")
+
+" call Dret("NetWrite")
endfun
" end of NetWrite
@@ -892,133 +899,150 @@ endfun
" g:netrw_list_cmd has a string, HOSTNAME, that needs to be substituted
" with the requested remote hostname first.
fun! <SID>NetList(dirname)
-"" call Dfunc("NetList(dirname<".a:dirname.">)")
+" call Dfunc("NetList(dirname<".a:dirname.">)")
- " sanity maintenance
- let dirname= a:dirname
- if dirname !~ '/$' && (!exists("g:netrw_machine") || !exists("b:netlist_method") || !exists("b:netlist_path"))
- let dirname= dirname."/"
+ " make this buffer modifiable
+ setlocal ma
+
+ " analyze a:dirname and g:netrw_list_cmd
+ let dirpat = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+ if a:dirname !~ dirpat
+ echoerr "NetList: I don't understand your dirname<".a:dirname.">"
+" call Dret("NetList 0 : badly formatted dirname")
+ return 0
endif
- set ma
+ let method = substitute(a:dirname,dirpat,'\1','')
+ let user = substitute(a:dirname,dirpat,'\2','')
+ let machine = substitute(a:dirname,dirpat,'\3','')
+ let path = substitute(a:dirname,dirpat,'\4','')
+ let fname = substitute(a:dirname,'^.*/\ze.','','')
+" call Decho("set up method <".method .">")
+" call Decho("set up user <".user .">")
+" call Decho("set up machine<".machine.">")
+" call Decho("set up path <".path .">")
+" call Decho("set up fname <".fname .">")
+
+ let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
+" call Decho("set up listcmd<".listcmd.">")
+
+ if fname =~ '@$' && fname !~ '^"'
+" call Decho("attempt transfer of symlink as file")
+ call s:NetList(substitute(a:dirname,'@$','','e'))
+ redraw!
+" call Dret("NetList 0 : symlink")
+ return 0
- if dirname !~ '/$' && dirname !~ '^"'
+ elseif fname !~ '/$' && fname !~ '^"'
" looks like a regular file, attempt transfer
-"" call Decho("attempt transfer with regular file<".dirname.">")
-"" call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
- %d
+" call Decho("attempt transfer as regular file<".a:dirname.">")
" remove any filetype indicator from end of dirname, except for the
- " "this is a directory" indicator (/)
- let dirname= substitute(dirname,"[*=@|]$","","e")
-"" call Decho("modified dirname<".dirname.">")
+ " "this is a directory" indicator (/). There shouldn't be one of those,
+ " anyway.
+ let path= substitute(path,'[*=@|]$','','e')
+" call Decho("new path<".path.">")
" remote-read the requested file into current buffer
- let machine= g:netrw_machine
- let method = b:netlist_method
- let path = b:netlist_path
enew!
- exe "file ".method."://".machine."/".path.dirname
- exe "doau BufReadPre ".dirname
- silent call s:NetRead(method."://".machine."/".path.dirname)
- exe "doau BufReadPost ".dirname
+ exe "file ".method."://".machine."/".path
+ exe "silent doau BufReadPre ".fname
+ silent call s:NetRead(method."://".machine."/".path)
+ exe "silent doau BufReadPost ".fname
1d
- set nomod noma
+ set nomod
- silent! unlet b:netlist_method
- silent! unlet b:netlist_cmd
- silent! unlet b:netlist_path
-"" call Dret("NetList")
- return
+" call Dret("NetList 0 : file<".fname.">")
+ return 0
+ endif
- elseif dirname == './'
- " refresh the directory list
-"" call Decho("refresh directory listing")
-"" call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
- %d
+ " ---------------------------------------------------------------------
+ " Perform Directory Listing:
+" call Decho("Perform directory listing...")
+ " set up new buffer and map
+ let bufname = method.'://'.user.machine.'/'.path
+ let bufnamenr = bufnr(bufname)
+" call Decho("bufname<".bufname."> bufnamenr=".bufnamenr)
+ if bufnamenr != -1
+ " buffer already exists, switch to it!
+ exe "b ".bufnamenr
+ if line("$") >= 5
+" call Dret("NetList 1")
+ return 1
+ endif
+ else
+ enew!
+ endif
+ setlocal bt=nofile bh=wipe nobl
+ exe 'file '.bufname
+ set bt=nowrite bh=hide nobl
+ nnoremap <buffer> <cr> :exe "norm! 0"<bar>call <SID>NetList(<SID>NetListChgDir(expand("%")))<cr>
+ setlocal ma
+
+" call Decho("executing: r! ".listcmd." '".path."'")
+ keepjumps put ='\" =============================='
+ keepjumps put ='\" Netrw Remote Directory Listing'
+ keepjumps put ='\" '.bufname
+ keepjumps put ='\" =============================='
+ exe "silent r! ".listcmd." '".path."'"
+ keepjumps 1d
+ set ft=netrwlist
+ if line("$") >= 5
+ keepjumps silent 5,$s/^\(.*\)\([/@]\)$/ \2\1/e
+ keepjumps silent 5,$call s:NetSort()
+ keepjumps silent 5,$s/^ \(.\)\(.*\)$/\2\1/e
+ keepjumps 5
+ endif
+ let prvbuf= bufnr(bufname)
+ if prvbuf != -1
+ exe "silent! b ".prvbuf
+ endif
- elseif dirname == '../'
- " go up one directory
+ setlocal noma nomod
- if b:netlist_path !~ '/' && strlen(b:netlist_path) > 0
- " go to top (rltv) directory
-"" call Decho("go up one directory : 1 path<".b:netlist_path.">")
- let b:netlist_path= ""
+" call Dret("NetList 1")
+ return 1
+endfun
- elseif b:netlist_path !~ '^[./]\+$' && strlen(b:netlist_path) > 0
- " remove a directory from the netlist_path
-"" call Decho("go up one directory : 2 path<".b:netlist_path.">")
- if b:netlist_path =~ '^[^/]*/$'
- let b:netlist_path= ""
- else
- let b:netlist_path= substitute(b:netlist_path,'^\(.*/\)[^/]*/$','\1','')
- endif
+" ---------------------------------------------------------------------
+" NetListCombine:
+fun! <SID>NetListChgDir(dirname)
+ let newdir= expand("<cWORD>")
+" call Dfunc("NetListChgDir(dirname<".a:dirname.">) newdir<".newdir.">")
- else
- " append ../
-"" call Decho("go up one directory : 3 path<".b:netlist_path.">")
- let b:netlist_path= b:netlist_path.'../'
- endif
-"" call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
- %d
+ let dirname= a:dirname
- elseif dirname !~ '^\w\+:' && dirname =~ '/$'
- " go down one directory
-"" call Decho("go down one directory<".dirname.">")
- let b:netlist_path=b:netlist_path.dirname
-"" call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
+ if newdir !~ '/$'
+ " handling a file
+ let dirname= dirname.newdir
+" call Decho("handling a file: dirname<".dirname.">")
+
+ elseif newdir == './'
+ " refresh the directory list
+" call Decho("refresh directory listing")
%d
- else
- " normal initial directory listing
-"" call Decho("normal initial directory listing")
+ elseif newdir == '../'
+ " go up one directory
+ let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','')
- let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',g:netrw_machine,'')
- let method = substitute(dirname,'^\(\w\+\):.*$','\1','')
- let fname = b:netrw_fname
-"" call Decho("set up listcmd<".listcmd.">")
-"" call Decho("set up method <".method.">")
-"" call Decho("set up fname <".fname.">")
+ if trailer =~ '^\%(\.\./\)*$'
+ " tack on a ../"
+ let dirname= dirname.'../'
- " set up window
- if &mod == 1
- wincmd s
- endif
- enew!
- if v:version >= 602
- setlocal bh=wipe
+ else
+ " strip off a directory name from dirname
+ let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
endif
-
- " set up buffer-local variables
- let b:netlist_method = method
- let b:netlist_cmd = listcmd
- let b:netlist_path = fname
+" call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
- " set up buffer-local map
- nnoremap <buffer> <cr> :call <SID>NetList(expand("<cWORD>"))<cr>
-
-"" call Decho("netlist method<".b:netlist_method."> cmd<".b:netlist_cmd."> path<".b:netlist_path.">")
- endif
-
-"" call Decho("executing: r! ".b:netlist_cmd." '".b:netlist_path."'")
- put ='\" =============================='
- put ='\" Netrw Remote Directory Listing'
- put ='\" '.g:netrw_machine.':'.b:netlist_path
- put ='\" =============================='
- exe "silent r! ".b:netlist_cmd." '".b:netlist_path."'"
- 1d
- set ft=netrwlist
- silent 5,$s/^\(.*\)\/$/ \1/e
- silent 5,$call s:NetSort()
- silent 5,$s/^ \(.*\)$/\1\//e
- 5
- exe 'file ['.g:netrw_machine.':'.b:netlist_path.']'
- if v:version >= 602
- setlocal nomod bh=wipe bt=nofile nobl noma
else
- setlocal nomod
+ " go down one directory
+ let dirname= dirname.newdir
+" call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
endif
-"" call Dret("NetList")
+" call Dret("NetListChgDir <".dirname.">")
+ return dirname
endfun
" ------------------------------------------------------------------------
@@ -1033,183 +1057,183 @@ endfun
" 8: fetch
" 9: sftp
fun! s:NetMethod(choice) " globals: method machine id passwd fname
-"" call Dfunc("NetMethod(a:choice<".a:choice.">)")
-
- " initialization
- let b:netrw_method = 0
- let g:netrw_machine = ""
- let b:netrw_fname = ""
- let g:netrw_port = ""
-
- " Patterns:
- " mipf : a:machine a:id password filename Use ftp
- " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
- " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid g: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://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 = '^dav://\([^/]\{-}\)/\(.*\)\=$'
- 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,'\2',"")
- let g:netrw_machine= substitute(a:choice,rcpurm,'\3',"")
- let b:netrw_fname = substitute(a:choice,rcpurm,'\4',"")
- 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 b: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
- let g:netrw_machine= substitute(a:choice,davurm,'\1',"")
- let b:netrw_fname = substitute(a:choice,davurm,'\2',"")
-
- " 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 g:netrw_port != ""
- let g:netrw_port = substitute(g:netrw_port,"[#:]","","")
- endif
- if userid != ""
- let g:netrw_uid= userid
- endif
- if exists("g:netrw_uid") && exists("g:netrw_passwd")
- let b:netrw_method = 3
- else
- if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
- let b:netrw_method= 2
+" call Dfunc("NetMethod(a:choice<".a:choice.">)")
+
+ " initialization
+ let b:netrw_method = 0
+ let g:netrw_machine = ""
+ let b:netrw_fname = ""
+ let g:netrw_port = ""
+
+ " Patterns:
+ " mipf : a:machine a:id password filename Use ftp
+ " mf : a:machine filename Use ftp + <.netrc> or g:netrw_uid g:netrw_passwd
+ " ftpurm : ftp://[user@]host[[#:]port]/filename Use ftp + <.netrc> or g:netrw_uid g: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://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 = '^dav://\([^/]\{-}\)/\(.*\)\=$'
+ 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,'\2',"")
+ let g:netrw_machine= substitute(a:choice,rcpurm,'\3',"")
+ let b:netrw_fname = substitute(a:choice,rcpurm,'\4',"")
+ 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 b: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
+ let g:netrw_machine= substitute(a:choice,davurm,'\1',"")
+ let b:netrw_fname = substitute(a:choice,davurm,'\2',"")
+
+ " 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 g:netrw_port != ""
+ let g:netrw_port = substitute(g:netrw_port,"[#:]","","")
+ endif
+ if userid != ""
+ let g:netrw_uid= userid
+ endif
+ if exists("g:netrw_uid") && exists("g:netrw_passwd")
+ let b:netrw_method = 3
else
- if !exists("g:netrw_uid") || g:netrw_uid == ""
- call NetUserPass()
- elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
- call NetUserPass(g:netrw_uid)
- " else just use current g:netrw_uid and g:netrw_passwd
+ if filereadable(expand("$HOME/.netrc")) && !exists("g:netrw_ignorenetrc")
+ let b:netrw_method= 2
+ else
+ if !exists("g:netrw_uid") || g:netrw_uid == ""
+ call NetUserPass()
+ elseif !exists("g:netrw_passwd") || g:netrw_passwd == ""
+ call NetUserPass(g:netrw_uid)
+ " else just use current g:netrw_uid and g:netrw_passwd
+ endif
+ let b:netrw_method= 3
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 g: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("g:netrw_passwd")
+
+ 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,mf,'\1',"")
- let b:netrw_fname = substitute(a:choice,mf,'\2',"")
-
- elseif 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
- if has("win32")
- " don't let PCs try <.netrc>
- let b:netrw_method = 3
+ let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
+ let g:netrw_uid = substitute(a:choice,mipf,'\2',"")
+ let g: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("g: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 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
+ if has("win32")
+ " don't let PCs try <.netrc>
+ let b:netrw_method = 3
+ endif
+
+ else
+ echoerr "***error*** cannot determine method"
+ let b:netrw_method = -1
endif
-
- else
- echoerr "***error*** cannot determine method"
- let b:netrw_method = -1
- 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("g:netrw_passwd") "Decho
-"" call Decho("g:netrw_passwd <".g:netrw_passwd.">")
-"" endif "Decho
-"" call Decho("b:netrw_fname <".b:netrw_fname.">")
-"" call Dret("NetMethod")
+
+" 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("g:netrw_passwd") "Decho
+" call Decho("g:netrw_passwd <".g:netrw_passwd.">")
+" endif "Decho
+" call Decho("b:netrw_fname <".b:netrw_fname.">")
+" call Dret("NetMethod")
endfun
" end of NetMethod
@@ -1222,83 +1246,83 @@ fun! NetUserPass(...)
" get/set userid
if a:0 == 0
-"" call Dfunc("NetUserPass(a:0<".a: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.">) {")
+" 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:")
+" call Decho("a:0=".a:0." case <=1:")
let g:netrw_passwd= inputsecret("Enter Password: ")
else " from command line
-"" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
+" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
let g:netrw_passwd=a:2
endif
-"" call Dret("NetUserPass")
+" call Dret("NetUserPass")
endfun
" end NetUserPass
" ------------------------------------------------------------------------
" NetOptionSave: save options and set to "standard" form {{{1
fun!s:NetOptionSave()
-"" call Dfunc("NetOptionSave()")
-
- " Get Temporary Filename
- let s:aikeep = &ai
- let s:cinkeep = &cin
- let s:cinokeep = &cino
- let s:comkeep = &com
- let s:cpokeep = &cpo
- let s:dirkeep = getcwd()
- let s:gdkeep = &gd
- let s:twkeep = &tw
- set cino =
- set com =
- set cpo -=aA
- set nocin noai
- set tw =0
- if has("win32") && !has("win95")
- let s:swfkeep= &swf
- set noswf
-"" call Decho("setting s:swfkeep to <".&swf.">")
- endif
+" call Dfunc("NetOptionSave()")
+
+ " Get Temporary Filename
+ let s:aikeep = &ai
+ let s:cinkeep = &cin
+ let s:cinokeep = &cino
+ let s:comkeep = &com
+ let s:cpokeep = &cpo
+ let s:dirkeep = getcwd()
+ let s:gdkeep = &gd
+ let s:twkeep = &tw
+ set cino =
+ set com =
+ set cpo -=aA
+ set nocin noai
+ set tw =0
+ if has("win32") && !has("win95")
+ let s:swfkeep= &swf
+ set noswf
+" call Decho("setting s:swfkeep to <".&swf.">")
+ endif
-"" call Dret("NetOptionSave")
+" call Dret("NetOptionSave")
endfun
" ------------------------------------------------------------------------
" NetOptionRestore: restore options {{{1
fun! s:NetOptionRestore()
-"" call Dfunc("NetOptionRestore()")
-
- let &ai = s:aikeep
- let &cin = s:cinkeep
- let &cino = s:cinokeep
- let &com = s:comkeep
- let &cpo = s:cpokeep
- exe "lcd ".s:dirkeep
- let &gd = s:gdkeep
- let &tw = s:twkeep
- if exists("s:swfkeep")
- let &swf= s:swfkeep
- unlet s:swfkeep
- endif
- unlet s:aikeep
- unlet s:cinkeep
- unlet s:cinokeep
- unlet s:comkeep
- unlet s:cpokeep
- unlet s:gdkeep
- unlet s:twkeep
- unlet s:dirkeep
-
-"" call Dret("NetOptionRestore")
+" call Dfunc("NetOptionRestore()")
+
+ let &ai = s:aikeep
+ let &cin = s:cinkeep
+ let &cino = s:cinokeep
+ let &com = s:comkeep
+ let &cpo = s:cpokeep
+ exe "lcd ".s:dirkeep
+ let &gd = s:gdkeep
+ let &tw = s:twkeep
+ if exists("s:swfkeep")
+ let &swf= s:swfkeep
+ unlet s:swfkeep
+ endif
+ unlet s:aikeep
+ unlet s:cinkeep
+ unlet s:cinokeep
+ unlet s:comkeep
+ unlet s:cpokeep
+ unlet s:gdkeep
+ unlet s:twkeep
+ unlet s:dirkeep
+
+" call Dret("NetOptionRestore")
endfun
" ------------------------------------------------------------------------
@@ -1310,12 +1334,12 @@ endfun
" at the end of the transfer.
if has("win95") && g:netrw_win95ftp
fun! NetReadFixup(method, line1, line2)
-"" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a: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")
+" call Dret("NetReadFixup")
endfun
endif
@@ -1340,8 +1364,8 @@ fun! <SID>NetSort() range
endwhile
" do insert
if lo < i
- exec i.'d_'
- call append(lo - 1, i_val)
+ exe 'keepjumps '.i.'d_'
+ keepjumps call append(lo - 1, i_val)
endif
let i = i + 1
endwhile