1" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2" PLUGIN SECTION 3" Date: Feb 08, 2016 4" Maintainer: Charles E Campbell <[email protected]> 5" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 6" Copyright: Copyright (C) 1999-2013 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 = "v165" 24let s:keepcpo = &cpo 25set cpo&vim 26"DechoRemOn 27 28" --------------------------------------------------------------------- 29" Public Interface: {{{1 30 31" Local Browsing Autocmds: {{{2 32augroup FileExplorer 33 au! 34 au BufLeave * if &ft != "netrw"|let w:netrw_prvfile= expand("%:p")|endif 35 au BufEnter * sil call s:LocalBrowse(expand("<amatch>")) 36 au VimEnter * sil call s:VimEnter(expand("<amatch>")) 37 if has("win32") || has("win95") || has("win64") || has("win16") 38 au BufEnter .* sil call s:LocalBrowse(expand("<amatch>")) 39 endif 40augroup END 41 42" Network Browsing Reading Writing: {{{2 43augroup Network 44 au! 45 au BufReadCmd file://* call netrw#FileUrlEdit(expand("<amatch>")) 46 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>")) 47 au FileReadCmd ftp://*,rcp://*,scp://*,http://*,file://*,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>")) 48 au BufWriteCmd ftp://*,rcp://*,scp://*,http://*,file://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>")) 49 au FileWriteCmd ftp://*,rcp://*,scp://*,http://*,file://*,dav://*,davs://*,rsync://*,sftp://* exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>")) 50 try 51 au SourceCmd ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 52 catch /^Vim\%((\a\+)\)\=:E216/ 53 au SourcePre ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 54 endtry 55augroup END 56 57" Commands: :Nread, :Nwrite, :NetUserPass {{{2 58com! -count=1 -nargs=* Nread let s:svpos= winsaveview()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call winrestview(s:svpos) 59com! -range=% -nargs=* Nwrite let s:svpos= winsaveview()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call winrestview(s:svpos) 60com! -nargs=* NetUserPass call NetUserPass(<f-args>) 61com! -nargs=* Nsource let s:svpos= winsaveview()<bar>call netrw#NetSource(<f-args>)<bar>call winrestview(s:svpos) 62com! -nargs=? Ntree call netrw#SetTreetop(1,<q-args>) 63 64" Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2 65com! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) 66com! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) 67com! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) 68com! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) 69com! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>) 70com! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) 71com! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) 72com! -nargs=* -bar -bang -count=0 -complete=dir Lexplore call netrw#Lexplore(<count>,<bang>0,<q-args>) 73 74" Commands: NetrwSettings {{{2 75com! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings() 76com! -bang NetrwClean call netrw#Clean(<bang>0) 77 78" Maps: 79if !exists("g:netrw_nogx") 80 if maparg('gx','n') == "" 81 if !hasmapto('<Plug>NetrwBrowseX') 82 nmap <unique> gx <Plug>NetrwBrowseX 83 endif 84 nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(netrw#GX(),netrw#CheckIfRemote(netrw#GX()))<cr> 85 endif 86 if maparg('gx','v') == "" 87 if !hasmapto('<Plug>NetrwBrowseXVis') 88 vmap <unique> gx <Plug>NetrwBrowseXVis 89 endif 90 vno <silent> <Plug>NetrwBrowseXVis :<c-u>call netrw#BrowseXVis()<cr> 91 endif 92endif 93if exists("g:netrw_usetab") && g:netrw_usetab 94 if maparg('<c-tab>','n') == "" 95 nmap <unique> <c-tab> <Plug>NetrwShrink 96 endif 97 nno <silent> <Plug>NetrwShrink :call netrw#Shrink()<cr> 98endif 99 100" --------------------------------------------------------------------- 101" LocalBrowse: invokes netrw#LocalBrowseCheck() on directory buffers {{{2 102fun! s:LocalBrowse(dirname) 103 " Unfortunate interaction -- only DechoMsg debugging calls can be safely used here. 104 " Otherwise, the BufEnter event gets triggered when attempts to write to 105 " the DBG buffer are made. 106 107 if !exists("s:vimentered") 108 " If s:vimentered doesn't exist, then the VimEnter event hasn't fired. It will, 109 " and so s:VimEnter() will then be calling this routine, but this time with s:vimentered defined. 110" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered doesn't exist)") 111" call Dret("s:LocalBrowse") 112 return 113 endif 114 115" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered=".s:vimentered.")") 116 117 if has("amiga") 118 " The check against '' is made for the Amiga, where the empty 119 " string is the current directory and not checking would break 120 " things such as the help command. 121" call Decho("(LocalBrowse) dirname<".a:dirname."> (isdirectory, amiga)") 122 if a:dirname != '' && isdirectory(a:dirname) 123 sil! call netrw#LocalBrowseCheck(a:dirname) 124 if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt 125 exe w:netrw_bannercnt 126 endif 127 endif 128 129 elseif isdirectory(a:dirname) 130" call Decho("(LocalBrowse) dirname<".a:dirname."> ft=".&ft." (isdirectory, not amiga)") 131" call Dredir("LocalBrowse ft last set: ","verbose set ft") 132 sil! call netrw#LocalBrowseCheck(a:dirname) 133 if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt 134 exe w:netrw_bannercnt 135 endif 136 137 else 138 " not a directory, ignore it 139" call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...") 140 endif 141 142" call Dret("s:LocalBrowse") 143endfun 144 145" --------------------------------------------------------------------- 146" s:VimEnter: after all vim startup stuff is done, this function is called. {{{2 147" Its purpose: to look over all windows and run s:LocalBrowse() on 148" them, which checks if they're directories and will create a directory 149" listing when appropriate. 150" It also sets s:vimentered, letting s:LocalBrowse() know that s:VimEnter() 151" has already been called. 152fun! s:VimEnter(dirname) 153" call Dfunc("s:VimEnter(dirname<".a:dirname.">) expand(%)<".expand("%").">") 154 let curwin = winnr() 155 let s:vimentered = 1 156 windo call s:LocalBrowse(expand("%:p")) 157 exe curwin."wincmd w" 158" call Dret("s:VimEnter") 159endfun 160 161" --------------------------------------------------------------------- 162" NetrwStatusLine: {{{1 163fun! NetrwStatusLine() 164" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".") 165 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") 166 let &stl= s:netrw_explore_stl 167 if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 168 if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 169 return "" 170 else 171 return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 172 endif 173endfun 174 175" ------------------------------------------------------------------------ 176" NetUserPass: set username and password for subsequent ftp transfer {{{1 177" Usage: :call NetUserPass() -- will prompt for userid and password 178" :call NetUserPass("uid") -- will prompt for password 179" :call NetUserPass("uid","password") -- sets global userid and password 180fun! NetUserPass(...) 181 182 " get/set userid 183 if a:0 == 0 184" call Dfunc("NetUserPass(a:0<".a:0.">)") 185 if !exists("g:netrw_uid") || g:netrw_uid == "" 186 " via prompt 187 let g:netrw_uid= input('Enter username: ') 188 endif 189 else " from command line 190" call Dfunc("NetUserPass(a:1<".a:1.">) {") 191 let g:netrw_uid= a:1 192 endif 193 194 " get password 195 if a:0 <= 1 " via prompt 196" call Decho("a:0=".a:0." case <=1:") 197 let g:netrw_passwd= inputsecret("Enter Password: ") 198 else " from command line 199" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 200 let g:netrw_passwd=a:2 201 endif 202" call Dret("NetUserPass") 203endfun 204 205" ------------------------------------------------------------------------ 206" Modelines And Restoration: {{{1 207let &cpo= s:keepcpo 208unlet s:keepcpo 209" vim:ts=8 fdm=marker 210