1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2" PLUGIN SECTION 3" Date: Dec 06, 2012 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 23let g:loaded_netrwPlugin = "v148" 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 BufReadCmd *[/\\] sil! call s:LocalBrowse(expand("<amatch>")) 38" au BufEnter *[^/\\] sil! call s:LocalBrowse(expand("<amatch>")) 39" au VimEnter *[^/\\] sil! call s:VimEnter(expand("<amatch>")) 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" echomsg "dirname<".a:dirname.">" 96 if has("amiga") 97 " The check against '' is made for the Amiga, where the empty 98 " string is the current directory and not checking would break 99 " things such as the help command. 100 if a:dirname != '' && isdirectory(a:dirname) 101 sil! call netrw#LocalBrowseCheck(a:dirname) 102 endif 103 elseif isdirectory(a:dirname) 104" echomsg "dirname<".dirname."> isdir" 105 sil! call netrw#LocalBrowseCheck(a:dirname) 106 endif 107 " not a directory, ignore it 108endfun 109 110" --------------------------------------------------------------------- 111" s:VimEnter: {{{2 112fun! s:VimEnter(dirname) 113 let curwin= winnr() 114 windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif 115 exe curwin."wincmd w" 116endfun 117 118" --------------------------------------------------------------------- 119" NetrwStatusLine: {{{1 120fun! NetrwStatusLine() 121" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".") 122 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") 123 let &stl= s:netrw_explore_stl 124 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 125 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 126 return "" 127 else 128 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 129 endif 130endfun 131 132" ------------------------------------------------------------------------ 133" NetUserPass: set username and password for subsequent ftp transfer {{{1 134" Usage: :call NetUserPass() -- will prompt for userid and password 135" :call NetUserPass("uid") -- will prompt for password 136" :call NetUserPass("uid","password") -- sets global userid and password 137fun! NetUserPass(...) 138 139 " get/set userid 140 if a:0 == 0 141" call Dfunc("NetUserPass(a:0<".a:0.">)") 142 if !exists("g:netrw_uid") || g:netrw_uid == "" 143 " via prompt 144 let g:netrw_uid= input('Enter username: ') 145 endif 146 else " from command line 147" call Dfunc("NetUserPass(a:1<".a:1.">) {") 148 let g:netrw_uid= a:1 149 endif 150 151 " get password 152 if a:0 <= 1 " via prompt 153" call Decho("a:0=".a:0." case <=1:") 154 let g:netrw_passwd= inputsecret("Enter Password: ") 155 else " from command line 156" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 157 let g:netrw_passwd=a:2 158 endif 159" call Dret("NetUserPass") 160endfun 161 162" ------------------------------------------------------------------------ 163" Modelines And Restoration: {{{1 164let &cpo= s:keepcpo 165unlet s:keepcpo 166" vim:ts=8 fdm=marker 167