1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2" PLUGIN SECTION 3" Date: Jul 27, 2010 4" Maintainer: Charles E Campbell, Jr <[email protected]> 5" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 6" Copyright: Copyright (C) 1999-2008 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" Load Once: {{{1 20if &cp || exists("g:loaded_netrwPlugin") 21 finish 22endif 23let g:loaded_netrwPlugin = "v140" 24if v:version < 702 25 echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None 26 finish 27endif 28let s:keepcpo = &cpo 29set cpo&vim 30 31" --------------------------------------------------------------------- 32" Public Interface: {{{1 33 34" Local Browsing: {{{2 35augroup FileExplorer 36 au! 37 au BufEnter * silent! call s:LocalBrowse(expand("<amatch>")) 38 au VimEnter * silent! call s:VimEnter(expand("<amatch>")) 39 if has("win32") || has("win95") || has("win64") || has("win16") 40 au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>")) 41 endif 42augroup END 43 44" Network Browsing Reading Writing: {{{2 45augroup Network 46 au! 47 if has("win32") || has("win95") || has("win64") || has("win16") 48 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>"))) 49 else 50 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>"))) 52 endif 53 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>")) 55 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>")) 57 try 58 au SourceCmd ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 59 catch /^Vim\%((\a\+)\)\=:E216/ 60 au SourcePre ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 61 endtry 62augroup END 63 64" Commands: :Nread, :Nwrite, :NetUserPass {{{2 65com! -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() 67com! -nargs=* NetUserPass call NetUserPass(<f-args>) 68com! -nargs=* Nsource call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn() 69 70" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2 71com! -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>) 78 79" Commands: NetrwSettings {{{2 80com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings() 81com! -bang NetrwClean call netrw#NetrwClean(<bang>0) 82 83" Maps: 84if !exists("g:netrw_nogx") && maparg('gx','n') == "" 85 if !hasmapto('<Plug>NetrwBrowseX') 86 nmap <unique> gx <Plug>NetrwBrowseX 87 endif 88 nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr> 89endif 90 91" --------------------------------------------------------------------- 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. 97" 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) 108 endif 109 " not a directory, ignore it 110endfun 111 112" --------------------------------------------------------------------- 113" s:VimEnter: {{{2 114fun! s:VimEnter(dirname) 115 let curwin= winnr() 116 windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif 117 exe curwin."wincmd w" 118endfun 119 120" --------------------------------------------------------------------- 121" NetrwStatusLine: {{{1 122fun! NetrwStatusLine() 123" 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") 125 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" ------------------------------------------------------------------------ 165" Modelines And Restoration: {{{1 166let &cpo= s:keepcpo 167unlet s:keepcpo 168" vim:ts=8 fdm=marker 169