blob: f9689649500083aae7ae42d7de4e1fa156c4b737 [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 Moolenaar5c736222010-01-06 20:54:52 +01003" Date: Aug 10, 2008
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 Moolenaar00a927d2010-05-14 23:24:24 +020023let g:loaded_netrwPlugin = "v138"
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 Moolenaardd2a3cd2007-05-05 17:10:09 +000084if !exists("g:netrw_nogx") && maparg('g','n') == ""
85 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)
115 windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
116 1wincmd w
117endfun
118
119" ---------------------------------------------------------------------
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000120" NetrwStatusLine: {{{1
121fun! NetrwStatusLine()
Bram Moolenaaraf48b092006-03-14 22:51:38 +0000122" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".")
123 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 +0000124 let &stl= s:netrw_explore_stl
125 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
126 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
127 return ""
128 else
129 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
130 endif
131endfun
132
133" ------------------------------------------------------------------------
134" NetUserPass: set username and password for subsequent ftp transfer {{{1
135" Usage: :call NetUserPass() -- will prompt for userid and password
136" :call NetUserPass("uid") -- will prompt for password
137" :call NetUserPass("uid","password") -- sets global userid and password
138fun! NetUserPass(...)
139
140 " get/set userid
141 if a:0 == 0
142" call Dfunc("NetUserPass(a:0<".a:0.">)")
143 if !exists("g:netrw_uid") || g:netrw_uid == ""
144 " via prompt
145 let g:netrw_uid= input('Enter username: ')
146 endif
147 else " from command line
148" call Dfunc("NetUserPass(a:1<".a:1.">) {")
149 let g:netrw_uid= a:1
150 endif
151
152 " get password
153 if a:0 <= 1 " via prompt
154" call Decho("a:0=".a:0." case <=1:")
155 let g:netrw_passwd= inputsecret("Enter Password: ")
156 else " from command line
157" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
158 let g:netrw_passwd=a:2
159 endif
160" call Dret("NetUserPass")
161endfun
162
163" ------------------------------------------------------------------------
Bram Moolenaar482aaeb2005-09-29 18:26:07 +0000164" Modelines And Restoration: {{{1
165let &cpo= s:keepcpo
166unlet s:keepcpo
167" vim:ts=8 fdm=marker