1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2" PLUGIN SECTION 3" Date: Apr 30, 2013 4" Maintainer: Charles E Campbell <[email protected]> 5" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 6" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{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 23"DechoTabOn 24let g:loaded_netrwPlugin = "v149" 25if v:version < 702 26 echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None 27 finish 28endif 29let s:keepcpo = &cpo 30set cpo&vim 31"DechoTabOn 32 33" --------------------------------------------------------------------- 34" Public Interface: {{{1 35 36" Local Browsing: {{{2 37augroup FileExplorer 38 au! 39 " SEE Benzinger problem... 40 au BufEnter * sil! call s:LocalBrowse(expand("<amatch>")) 41 au VimEnter * sil! call s:VimEnter(expand("<amatch>")) 42 if has("win32") || has("win95") || has("win64") || has("win16") 43 au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>")) 44 endif 45augroup END 46 47" Network Browsing Reading Writing: {{{2 48augroup Network 49 au! 50 au BufReadCmd file://* call netrw#FileUrlRead(expand("<amatch>")) 51 au BufReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>")) 52 au FileReadCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>")) 53 au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>")) 54 au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>")) 55 try 56 au SourceCmd ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 57 catch /^Vim\%((\a\+)\)\=:E216/ 58 au SourcePre ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 59 endtry 60augroup END 61 62" Commands: :Nread, :Nwrite, :NetUserPass {{{2 63com! -count=1 -nargs=* Nread call netrw#NetrwSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetrwRestorePosn() 64com! -range=% -nargs=* Nwrite call netrw#NetrwSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetrwRestorePosn() 65com! -nargs=* NetUserPass call NetUserPass(<f-args>) 66com! -nargs=* Nsource call netrw#NetrwSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetrwRestorePosn() 67 68" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2 69com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) 70com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) 71com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) 72com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) 73com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>) 74com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) 75com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) 76 77" Commands: NetrwSettings {{{2 78com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings() 79com! -bang NetrwClean call netrw#NetrwClean(<bang>0) 80 81" Maps: 82if !exists("g:netrw_nogx") && maparg('gx','n') == "" 83 if !hasmapto('<Plug>NetrwBrowseX') 84 nmap <unique> gx <Plug>NetrwBrowseX 85 endif 86 nno <silent> <Plug>NetrwBrowseX :call netrw#NetrwBrowseX(expand("<cWORD>"),0)<cr> 87endif 88 89" --------------------------------------------------------------------- 90" LocalBrowse: {{{2 91fun! s:LocalBrowse(dirname) 92 " unfortunate interaction -- debugging calls can't be used here; 93 " the BufEnter event causes triggering when attempts to write to 94 " the DBG buffer are made. 95 if !exists("s:vimentered") 96 return 97 endif 98" call Decho("s:LocalBrowse(dirname<".a:dirname.">){") 99" echomsg "dirname<".a:dirname.">" 100 if has("amiga") 101 " The check against '' is made for the Amiga, where the empty 102 " string is the current directory and not checking would break 103 " things such as the help command. 104" call Decho("(LocalBrowse) dirname<".a:dirname."> (amiga)") 105 if a:dirname != '' && isdirectory(a:dirname) 106 sil! call netrw#LocalBrowseCheck(a:dirname) 107 endif 108 elseif isdirectory(a:dirname) 109" echomsg "dirname<".dirname."> isdir" 110" call Decho("(LocalBrowse) dirname<".a:dirname."> (not amiga)") 111 sil! call netrw#LocalBrowseCheck(a:dirname) 112 endif 113 " not a directory, ignore it 114" call Decho("|return s:LocalBrowse }") 115endfun 116 117" --------------------------------------------------------------------- 118" s:VimEnter: {{{2 119fun! s:VimEnter(dirname) 120" call Decho("VimEnter(dirname<".a:dirname.">){") 121 let curwin = winnr() 122 let s:vimentered = 1 123 windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif 124 exe curwin."wincmd w" 125" call Decho("|return VimEnter }") 126endfun 127 128" --------------------------------------------------------------------- 129" NetrwStatusLine: {{{1 130fun! NetrwStatusLine() 131" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".") 132 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") 133 let &stl= s:netrw_explore_stl 134 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 135 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 136 return "" 137 else 138 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 139 endif 140endfun 141 142" ------------------------------------------------------------------------ 143" NetUserPass: set username and password for subsequent ftp transfer {{{1 144" Usage: :call NetUserPass() -- will prompt for userid and password 145" :call NetUserPass("uid") -- will prompt for password 146" :call NetUserPass("uid","password") -- sets global userid and password 147fun! NetUserPass(...) 148 149 " get/set userid 150 if a:0 == 0 151" call Dfunc("NetUserPass(a:0<".a:0.">)") 152 if !exists("g:netrw_uid") || g:netrw_uid == "" 153 " via prompt 154 let g:netrw_uid= input('Enter username: ') 155 endif 156 else " from command line 157" call Dfunc("NetUserPass(a:1<".a:1.">) {") 158 let g:netrw_uid= a:1 159 endif 160 161 " get password 162 if a:0 <= 1 " via prompt 163" call Decho("a:0=".a:0." case <=1:") 164 let g:netrw_passwd= inputsecret("Enter Password: ") 165 else " from command line 166" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 167 let g:netrw_passwd=a:2 168 endif 169" call Dret("NetUserPass") 170endfun 171 172" ------------------------------------------------------------------------ 173" Modelines And Restoration: {{{1 174let &cpo= s:keepcpo 175unlet s:keepcpo 176" vim:ts=8 fdm=marker 177