summaryrefslogtreecommitdiffstats
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 fdb6d27939..60dec437ff 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_l