blob: bc5a85a8438682a0dc407acbf1bc71e56d33456e [file] [log] [blame]
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00001" netrwPlugin.vim: Handles file transfer and remote directory listing across a network
2" PLUGIN PORTION
Bram Moolenaar8349fd72005-10-12 20:52:20 +00003" Date: Oct 12, 2005
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00004" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
Bram Moolenaar482aaeb2005-09-29 18:26:07 +00005" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
6" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
7" 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" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
19
20" ---------------------------------------------------------------------
21" Load Once: {{{1
22if exists("g:loaded_netrw")
23 finish
24endif
Bram Moolenaar8349fd72005-10-12 20:52:20 +000025if v:version < 700
26 echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None
27 finish
28endif
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000029let s:keepcpo= &cpo
30set cpo&vim
31
32" ---------------------------------------------------------------------
33" Public Interface: {{{1
34
35" Local Browsing: {{{2
36augroup FileExplorer
37 au!
38 au BufEnter * call s:LocalBrowse(expand("<amatch>"))
39augroup END
40
41" Network Browsing Reading Writing: {{{2
42augroup Network
43 au!
44 if has("win32") || has("win95") || has("win64") || has("win16")
45 au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e '.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>")
46 else
47 au BufReadCmd file:///* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e /'.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>")
48 au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e /'.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>")
49 endif
50 au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe "Nread 0r ".expand("<amatch>")|exe "silent doau BufReadPost ".expand("<amatch>")
51 au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe "Nread " .expand("<amatch>")|exe "silent doau FileReadPost ".expand("<amatch>")
Bram Moolenaar8349fd72005-10-12 20:52:20 +000052 au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe "Nwrite " .expand("<amatch>")|exe "silent doau BufWritePost ".expand("<amatch>")
53 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe "'[,']Nwrite " .expand("<amatch>")|exe "silent doau FileWritePost ".expand("<amatch>")
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000054augroup END
55
56" Commands: :Nread, :Nwrite, :NetUserPass {{{2
57com! -nargs=* Nread call netrw#NetSavePosn()<bar>call netrw#NetRead(<f-args>)<bar>call netrw#NetRestorePosn()
58com! -range=% -nargs=* Nwrite call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn()
59com! -nargs=* NetUserPass call NetUserPass(<f-args>)
60
61" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2
Bram Moolenaar8349fd72005-10-12 20:52:20 +000062com! -nargs=? -bar -bang -count=0 Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>)
63com! -nargs=? -bar -bang -count=0 Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>)
64com! -nargs=? -bar -bang -count=0 Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>)
65com! -nargs=? -bar -bang -count=0 Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>)
66com! -nargs=? -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>)
67com! -nargs=? -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>)
Bram Moolenaar482aaeb2005-09-29 18:26:07 +000068
69" Commands: NetrwSettings {{{2
70com! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings()
71
72" ---------------------------------------------------------------------
73" LocalBrowse: {{{2
74fun! s:LocalBrowse(dirname)
75 " unfortunate interaction -- debugging calls can't be used here;
76 " the BufEnter event causes triggering when attempts to write to
77 " the DBG buffer are made.
78 if isdirectory(a:dirname)
79 call netrw#DirBrowse(a:dirname)
80 endif
81 " not a directory, ignore it
82endfun
83
84" ---------------------------------------------------------------------
85" NetrwStatusLine: {{{1
86fun! NetrwStatusLine()
87" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".")
88 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")
89 let &stl= s:netrw_explore_stl
90 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
91 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif
92 return ""
93 else
94 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
95 endif
96endfun
97
98" ------------------------------------------------------------------------
99" NetUserPass: set username and password for subsequent ftp transfer {{{1
100" Usage: :call NetUserPass() -- will prompt for userid and password
101" :call NetUserPass("uid") -- will prompt for password
102" :call NetUserPass("uid","password") -- sets global userid and password
103fun! NetUserPass(...)
104
105 " get/set userid
106 if a:0 == 0
107" call Dfunc("NetUserPass(a:0<".a:0.">)")
108 if !exists("g:netrw_uid") || g:netrw_uid == ""
109 " via prompt
110 let g:netrw_uid= input('Enter username: ')
111 endif
112 else " from command line
113" call Dfunc("NetUserPass(a:1<".a:1.">) {")
114 let g:netrw_uid= a:1
115 endif
116
117 " get password
118 if a:0 <= 1 " via prompt
119" call Decho("a:0=".a:0." case <=1:")
120 let g:netrw_passwd= inputsecret("Enter Password: ")
121 else " from command line
122" call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
123 let g:netrw_passwd=a:2
124 endif
125" call Dret("NetUserPass")
126endfun
127
128" ------------------------------------------------------------------------
129" NetReadFixup: this sort of function is typically written by the user {{{1
130" to handle extra junk that their system's ftp dumps
131" into the transfer. This function is provided as an
132" example and as a fix for a Windows 95 problem: in my
133" experience, win95's ftp always dumped four blank lines
134" at the end of the transfer.
135if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
136 fun! NetReadFixup(method, line1, line2)
137" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
138 if method == 3 " ftp (no <.netrc>)
139 let fourblanklines= line2 - 3
140 silent fourblanklines.",".line2."g/^\s*/d"
141 endif
142" call Dret("NetReadFixup")
143 endfun
144endif
145
146" ------------------------------------------------------------------------
147" Modelines And Restoration: {{{1
148let &cpo= s:keepcpo
149unlet s:keepcpo
150" vim:ts=8 fdm=marker