blob: 3ce710b0ad3548a2279c72cca3a467d9e8f404c7 [file] [log] [blame]
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +00002" PLUGIN SECTION
Bram Moolenaar5ac3b1a2010-07-27 22:50:36 +02003" Date: Jul 27, 2010
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +00004" Maintainer: Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00005" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
Bram Moolenaare37d50a2008-08-06 17:06:04 +00006" Copyright: Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00007" Permission is hereby granted to use and distribute this code,
8" with or without modifications, provided that this copyright
9" notice is copied with it. Like anything else that's free,
10" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided
11" *as is* and comes with no warranty of any kind, either
12" expressed or implied. By using this plugin, you agree that
13" in no event will the copyright holder be liable for any damages
14" resulting from the use of this software.
15"
16" But be doers of the Word, and not only hearers, deluding your own selves {{{1
17" (James 1:22 RSV)
18" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000019" Load Once: {{{1
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000020if &cp || exists("g:loaded_netrwPlugin")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000021 finish
22endif
Bram Moolenaar477db062010-07-28 18:17:41 +020023let g:loaded_netrwPlugin = "v140"
Bram Moolenaar5c736222010-01-06 20:54:52 +010024if v:version < 702
25 echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
Bram Moolenaar8349fd72005-10-12 20:52:20 +000026 finish
27endif
Bram Moolenaar5c736222010-01-06 20:54:52 +010028let s:keepcpo = &cpo
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000029set cpo&vim
30
31" ---------------------------------------------------------------------
32" Public Interface: {{{1
33
34" Local Browsing: {{{2
35augroup FileExplorer
36 au!
Bram Moolenaarb8a7b562006-02-01 21:47:16 +000037 au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
Bram Moolenaar00a927d2010-05-14 23:24:24 +020038 au VimEnter * silent! call s:VimEnter(expand("<amatch>"))
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000039 if has("win32") || has("win95") || has("win64") || has("win16")
40 au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
41 endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000042augroup END
43
44" Network Browsing Reading Writing: {{{2
45augroup Network
46 au!
47 if has("win32") || has("win95") || has("win64") || has("win16")
Bram Moolenaare37d50a2008-08-06 17:06:04 +000048 au BufReadCmd file://* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000049 else
Bram Moolenaare37d50a2008-08-06 17:06:04 +000050 au BufReadCmd file://* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
51 au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000052 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +010053 au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
54 au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
Bram Moolenaare37d50a2008-08-06 17:06:04 +000055 au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
56 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000057 try
Bram Moolenaare37d50a2008-08-06 17:06:04 +000058 au SourceCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>"))
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000059 catch /^Vim\%((\a\+)\)\=:E216/
Bram Moolenaare37d50a2008-08-06 17:06:04 +000060 au SourcePre ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>"))
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000061 endtry
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000062augroup END
63
64" Commands: :Nread, :Nwrite, :NetUserPass {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +000065com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn()
66com! -range=% -nargs=* Nwrite call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn()
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000067com! -nargs=* NetUserPass call NetUserPass(<f-args>)
Bram Moolenaarf2330482008-06-24 20:19:36 +000068com! -nargs=* Nsource call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn()
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000069
70" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000071com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
72com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
73com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
74com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
75com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>)
76com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>)
77com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>)
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000078
79" Commands: NetrwSettings {{{2
Bram Moolenaarf2330482008-06-24 20:19:36 +000080com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings()
81com! -bang NetrwClean call netrw#NetrwClean(<bang>0)
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000082
Bram Moolenaarb8a7b562006-02-01 21:47:16 +000083" Maps:
Bram Moolenaar5ac3b1a2010-07-27 22:50:36 +020084if !exists("g:netrw_nogx") && maparg('gx','n') == ""
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000085 if !hasmapto('<Plug>NetrwBrowseX')
86 nmap <unique> gx <Plug>NetrwBrowseX
87 endif
Bram Moolenaarf2330482008-06-24 20:19:36 +000088 nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr>
Bram Moolenaarb8a7b562006-02-01 21:47:16 +000089endif
Bram Moolenaarb8a7b562006-02-01 21:47:16 +000090
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000091" ---------------------------------------------------------------------
92" LocalBrowse: {{{2
93fun! s:LocalBrowse(dirname)
94 " unfortunate interaction -- debugging calls can't be used here;
95 " the BufEnter event causes triggering when attempts to write to
96 " the DBG buffer are made.
Bram Moolenaardd2a3cd2007-05-05 17:10:09 +000097" echomsg "dirname<".a:dirname.">"
98 if has("amiga")
99 " The check against '' is made for the Amiga, where the empty
100 " string is the current directory and not checking would break
101 " things such as the help command.
102 if a:dirname != '' && isdirectory(a:dirname)
103 silent! call netrw#LocalBrowseCheck(a:dirname)
104 endif
105 elseif isdirectory(a:dirname)
106" echomsg "dirname<".dirname."> isdir"
107 silent! call netrw#LocalBrowseCheck(a:dirname)
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000108 endif
109 " not a directory, ignore it
110endfun
111
112" ---------------------------------------------------------------------
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200113" s:VimEnter: {{{2
114fun! s:VimEnter(dirname)
Bram Moolenaar477db062010-07-28 18:17:41 +0200115 let curwin= winnr()
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200116 windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
Bram Moolenaar477db062010-07-28 18:17:41 +0200117 exe curwin."wincmd w"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200118endfun
119
120" ---------------------------------------------------------------------
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000121" NetrwStatusLine: {{{1
122fun! NetrwStatusLine()
Bram Moolenaaraf48b092006-03-14 22:51:38 +0000123" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
124 if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000125 let &stl= s:netrw_explore_stl
126 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
127 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
128 return ""
129 else
130 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
131 endif
132endfun
133
134" ------------------------------------------------------------------------
135" NetUserPass: set username and password for subsequent ftp transfer {{{1
136" Usage: :call NetUserPass() -- will prompt for userid and password
137" :call NetUserPass("uid") -- will prompt for password
138" :call NetUserPass("uid","password") -- sets global userid and password
139fun! NetUserPass(...)
140
141 " get/set userid
142 if a:0 == 0
143" call Dfunc("NetUserPass(a:0<".a:0.">)")
144 if !exists("g:netrw_uid") || g:netrw_uid == ""
145 " via prompt
146 let g:netrw_uid= input('Enter username: ')
147 endif
148 else " from command line
149" call Dfunc("NetUserPass(a:1<".a:1.">) {")
150 let g:netrw_uid= a:1
151 endif
152
153 " get password
154 if a:0 <= 1 " via prompt
155" call Decho("a:0=".a:0." case <=1:")
156 let g:netrw_passwd= inputsecret("Enter Password: ")
157 else " from command line
158" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
159 let g:netrw_passwd=a:2
160 endif
161" call Dret("NetUserPass")
162endfun
163
164" ------------------------------------------------------------------------
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000165" Modelines And Restoration: {{{1
166let &cpo= s:keepcpo
167unlet s:keepcpo
168" vim:ts=8 fdm=marker