1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2" PLUGIN PORTION 3" Date: Oct 27, 2005 4" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz> 5" 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 25if v:version < 700 26 echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None 27 finish 28endif 29let 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 ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>")) 46 else 47 au BufReadCmd file://* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>")) 48 au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(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 FileReadPre ".expand("<amatch>")|exe "Nread " .expand("<amatch>")|exe "silent doau FileReadPost ".expand("<amatch>") 52 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 FileWritePre ".expand("<amatch>")|exe "'[,']Nwrite " .expand("<amatch>")|exe "silent doau FileWritePost ".expand("<amatch>") 54augroup 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 62com! -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>) 68 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 151