1482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2dd2a3cdaSBram Moolenaar" PLUGIN SECTION 3*8feef4ffSBram Moolenaar" Date: Nov 07, 2014 4ff034194SBram Moolenaar" Maintainer: Charles E Campbell <[email protected]> 5482aaeb0SBram Moolenaar" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 68d043171SBram Moolenaar" Copyright: Copyright (C) 1999-2013 Charles E. Campbell {{{1 7482aaeb0SBram Moolenaar" Permission is hereby granted to use and distribute this code, 8482aaeb0SBram Moolenaar" with or without modifications, provided that this copyright 9482aaeb0SBram Moolenaar" notice is copied with it. Like anything else that's free, 10482aaeb0SBram Moolenaar" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided 11482aaeb0SBram Moolenaar" *as is* and comes with no warranty of any kind, either 12482aaeb0SBram Moolenaar" expressed or implied. By using this plugin, you agree that 13482aaeb0SBram Moolenaar" in no event will the copyright holder be liable for any damages 14482aaeb0SBram Moolenaar" resulting from the use of this software. 15482aaeb0SBram Moolenaar" 16482aaeb0SBram Moolenaar" But be doers of the Word, and not only hearers, deluding your own selves {{{1 17482aaeb0SBram Moolenaar" (James 1:22 RSV) 18482aaeb0SBram Moolenaar" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 19482aaeb0SBram Moolenaar" Load Once: {{{1 20dd2a3cdaSBram Moolenaarif &cp || exists("g:loaded_netrwPlugin") 21482aaeb0SBram Moolenaar finish 22482aaeb0SBram Moolenaarendif 23*8feef4ffSBram Moolenaarlet g:loaded_netrwPlugin = "v153" 245c73622aSBram Moolenaarif v:version < 702 258d043171SBram Moolenaar echohl WarningMsg 268d043171SBram Moolenaar echo "***warning*** you need vim version 7.2 for this version of netrw" 278d043171SBram Moolenaar echohl None 288d043171SBram Moolenaar finish 298d043171SBram Moolenaarendif 308d043171SBram Moolenaarif v:version < 703 || (v:version == 703 && !has("patch465")) 318d043171SBram Moolenaar echohl WarningMsg 328d043171SBram Moolenaar echo "***warning*** this version of netrw needs vim 7.3.465 or later" 338d043171SBram Moolenaar echohl Normal 348349fd7cSBram Moolenaar finish 358349fd7cSBram Moolenaarendif 36482aaeb0SBram Moolenaarlet s:keepcpo = &cpo 37482aaeb0SBram Moolenaarset cpo&vim 388d043171SBram Moolenaar"DechoRemOn 39482aaeb0SBram Moolenaar 40482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 41482aaeb0SBram Moolenaar" Public Interface: {{{1 42482aaeb0SBram Moolenaar 438d043171SBram Moolenaar" Local Browsing Autocmds: {{{2 44482aaeb0SBram Moolenaaraugroup FileExplorer 45482aaeb0SBram Moolenaar au! 46a6878375SBram Moolenaar au BufLeave * if &ft != "netrw"|let w:netrw_prvfile= expand("%:p")|endif 478d043171SBram Moolenaar au BufEnter * sil call s:LocalBrowse(expand("<amatch>")) 488d043171SBram Moolenaar au VimEnter * sil call s:VimEnter(expand("<amatch>")) 49dd2a3cdaSBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16") 508d043171SBram Moolenaar au BufEnter .* sil call s:LocalBrowse(expand("<amatch>")) 51dd2a3cdaSBram Moolenaar endif 52482aaeb0SBram Moolenaaraugroup END 53482aaeb0SBram Moolenaar 54482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2 55482aaeb0SBram Moolenaaraugroup Network 56482aaeb0SBram Moolenaar au! 57adc2182cSBram Moolenaar au BufReadCmd file://* call netrw#FileUrlRead(expand("<amatch>")) 58*8feef4ffSBram Moolenaar au BufReadCmd ftp://*,rcp://*,scp://*,http://*,file://*,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>")) 59*8feef4ffSBram Moolenaar 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>")) 60*8feef4ffSBram Moolenaar 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>")) 61*8feef4ffSBram Moolenaar 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>")) 62dd2a3cdaSBram Moolenaar try 63*8feef4ffSBram Moolenaar au SourceCmd ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 64dd2a3cdaSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E216/ 65*8feef4ffSBram Moolenaar au SourcePre ftp://*,rcp://*,scp://*,http://*,file://*,https://*,dav://*,davs://*,rsync://*,sftp://* exe 'Nsource '.fnameescape(expand("<amatch>")) 66dd2a3cdaSBram Moolenaar endtry 67482aaeb0SBram Moolenaaraugroup END 68482aaeb0SBram Moolenaar 69482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2 70a6878375SBram Moolenaarcom! -count=1 -nargs=* Nread call netrw#SavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#RestorePosn() 71a6878375SBram Moolenaarcom! -range=% -nargs=* Nwrite call netrw#SavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#RestorePosn() 72482aaeb0SBram Moolenaarcom! -nargs=* NetUserPass call NetUserPass(<f-args>) 73a6878375SBram Moolenaarcom! -nargs=* Nsource call netrw#SavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#RestorePosn() 74a6878375SBram Moolenaarcom! -nargs=? Ntree call netrw#SetTreetop(<q-args>) 75482aaeb0SBram Moolenaar 768d043171SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore, Lexplore {{{2 77dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) 78dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) 79dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) 80dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) 81dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>) 82dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) 83dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) 84*8feef4ffSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Lexplore call netrw#Lexplore(<count>,<bang>0,<q-args>) 85482aaeb0SBram Moolenaar 86482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2 87f233048aSBram Moolenaarcom! -nargs=0 NetrwSettings call netrwSettings#NetrwSettings() 88a6878375SBram Moolenaarcom! -bang NetrwClean call netrw#Clean(<bang>0) 89482aaeb0SBram Moolenaar 90b8a7b560SBram Moolenaar" Maps: 91*8feef4ffSBram Moolenaarif !exists("g:netrw_nogx") 92*8feef4ffSBram Moolenaar if maparg('gx','n') == "" 93b8a7b560SBram Moolenaar if !hasmapto('<Plug>NetrwBrowseX') 94b8a7b560SBram Moolenaar nmap <unique> gx <Plug>NetrwBrowseX 95b8a7b560SBram Moolenaar endif 96*8feef4ffSBram Moolenaar nno <silent> <Plug>NetrwBrowseX :call netrw#BrowseX(expand((exists("g:netrw_gx")? g:netrw_gx : '<cfile>')),netrw#CheckIfRemote())<cr> 97*8feef4ffSBram Moolenaar endif 98*8feef4ffSBram Moolenaar if maparg('gx','v') == "" 99*8feef4ffSBram Moolenaar if !hasmapto('<Plug>NetrwBrowseXVis') 100*8feef4ffSBram Moolenaar vmap <unique> gx <Plug>NetrwBrowseXVis 101*8feef4ffSBram Moolenaar endif 102*8feef4ffSBram Moolenaar vno <silent> <Plug>NetrwBrowseXVis :<c-u>call netrw#BrowseXVis()<cr> 103*8feef4ffSBram Moolenaar endif 104dd2a3cdaSBram Moolenaarendif 105b8a7b560SBram Moolenaar 106482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 1078d043171SBram Moolenaar" LocalBrowse: invokes netrw#LocalBrowseCheck() on directory buffers {{{2 108482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname) 1098d043171SBram Moolenaar " Unfortunate interaction -- only DechoMsg debugging calls can be safely used here. 1108d043171SBram Moolenaar " Otherwise, the BufEnter event gets triggered when attempts to write to 111482aaeb0SBram Moolenaar " the DBG buffer are made. 1128d043171SBram Moolenaar 113e6ae6225SBram Moolenaar if !exists("s:vimentered") 1148d043171SBram Moolenaar " If s:vimentered doesn't exist, then the VimEnter event hasn't fired. It will, 1158d043171SBram Moolenaar " and so s:VimEnter() will then be calling this routine, but this time with s:vimentered defined. 1168d043171SBram Moolenaar" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered doesn't exist)") 1178d043171SBram Moolenaar" call Dret("s:LocalBrowse") 118e6ae6225SBram Moolenaar return 119e6ae6225SBram Moolenaar endif 1208d043171SBram Moolenaar 1218d043171SBram Moolenaar" call Dfunc("s:LocalBrowse(dirname<".a:dirname.">) (s:vimentered=".s:vimentered.")") 1228d043171SBram Moolenaar 123dd2a3cdaSBram Moolenaar if has("amiga") 124dd2a3cdaSBram Moolenaar " The check against '' is made for the Amiga, where the empty 125dd2a3cdaSBram Moolenaar " string is the current directory and not checking would break 126dd2a3cdaSBram Moolenaar " things such as the help command. 1278d043171SBram Moolenaar" call Decho("(LocalBrowse) dirname<".a:dirname."> (isdirectory, amiga)") 128dd2a3cdaSBram Moolenaar if a:dirname != '' && isdirectory(a:dirname) 129adc2182cSBram Moolenaar sil! call netrw#LocalBrowseCheck(a:dirname) 130*8feef4ffSBram Moolenaar if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt 131a6878375SBram Moolenaar exe w:netrw_bannercnt 132a6878375SBram Moolenaar endif 133dd2a3cdaSBram Moolenaar endif 1348d043171SBram Moolenaar 135dd2a3cdaSBram Moolenaar elseif isdirectory(a:dirname) 136a6878375SBram Moolenaar" call Decho("(LocalBrowse) dirname<".a:dirname."> ft=".&ft." (isdirectory, not amiga)") 137a6878375SBram Moolenaar" call Dredir("LocalBrowse ft last set: ","verbose set ft") 138adc2182cSBram Moolenaar sil! call netrw#LocalBrowseCheck(a:dirname) 139*8feef4ffSBram Moolenaar if exists("w:netrw_bannercnt") && line('.') < w:netrw_bannercnt 140a6878375SBram Moolenaar exe w:netrw_bannercnt 141a6878375SBram Moolenaar endif 1428d043171SBram Moolenaar 1438d043171SBram Moolenaar else 144482aaeb0SBram Moolenaar " not a directory, ignore it 1458d043171SBram Moolenaar" call Decho("(LocalBrowse) dirname<".a:dirname."> not a directory, ignoring...") 1468d043171SBram Moolenaar endif 1478d043171SBram Moolenaar 1488d043171SBram Moolenaar" call Dret("s:LocalBrowse") 149482aaeb0SBram Moolenaarendfun 150482aaeb0SBram Moolenaar 151482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 1528d043171SBram Moolenaar" s:VimEnter: after all vim startup stuff is done, this function is called. {{{2 1538d043171SBram Moolenaar" Its purpose: to look over all windows and run s:LocalBrowse() on 1548d043171SBram Moolenaar" them, which checks if they're directories and will create a directory 1558d043171SBram Moolenaar" listing when appropriate. 1568d043171SBram Moolenaar" It also sets s:vimentered, letting s:LocalBrowse() know that s:VimEnter() 1578d043171SBram Moolenaar" has already been called. 15800a927d6SBram Moolenaarfun! s:VimEnter(dirname) 1598d043171SBram Moolenaar" call Dfunc("s:VimEnter(dirname<".a:dirname.">) expand(%)<".expand("%").">") 160477db060SBram Moolenaar let curwin = winnr() 161e6ae6225SBram Moolenaar let s:vimentered = 1 1628d043171SBram Moolenaar windo call s:LocalBrowse(expand("%:p")) 163477db060SBram Moolenaar exe curwin."wincmd w" 1648d043171SBram Moolenaar" call Dret("s:VimEnter") 16500a927d6SBram Moolenaarendfun 16600a927d6SBram Moolenaar 16700a927d6SBram Moolenaar" --------------------------------------------------------------------- 168482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1 169482aaeb0SBram Moolenaarfun! NetrwStatusLine() 170af48b092SBram Moolenaar" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".") 171af48b092SBram Moolenaar 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") 172482aaeb0SBram Moolenaar let &stl= s:netrw_explore_stl 173482aaeb0SBram Moolenaar if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 174482aaeb0SBram Moolenaar if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 175482aaeb0SBram Moolenaar return "" 176482aaeb0SBram Moolenaar else 177482aaeb0SBram Moolenaar return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 178482aaeb0SBram Moolenaar endif 179482aaeb0SBram Moolenaarendfun 180482aaeb0SBram Moolenaar 181482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 182482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1 183482aaeb0SBram Moolenaar" Usage: :call NetUserPass() -- will prompt for userid and password 184482aaeb0SBram Moolenaar" :call NetUserPass("uid") -- will prompt for password 185482aaeb0SBram Moolenaar" :call NetUserPass("uid","password") -- sets global userid and password 186482aaeb0SBram Moolenaarfun! NetUserPass(...) 187482aaeb0SBram Moolenaar 188482aaeb0SBram Moolenaar " get/set userid 189482aaeb0SBram Moolenaar if a:0 == 0 190482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:0<".a:0.">)") 191482aaeb0SBram Moolenaar if !exists("g:netrw_uid") || g:netrw_uid == "" 192482aaeb0SBram Moolenaar " via prompt 193482aaeb0SBram Moolenaar let g:netrw_uid= input('Enter username: ') 194482aaeb0SBram Moolenaar endif 195482aaeb0SBram Moolenaar else " from command line 196482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:1<".a:1.">) {") 197482aaeb0SBram Moolenaar let g:netrw_uid= a:1 198482aaeb0SBram Moolenaar endif 199482aaeb0SBram Moolenaar 200482aaeb0SBram Moolenaar " get password 201482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt 202482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case <=1:") 203482aaeb0SBram Moolenaar let g:netrw_passwd= inputsecret("Enter Password: ") 204482aaeb0SBram Moolenaar else " from command line 205482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 206482aaeb0SBram Moolenaar let g:netrw_passwd=a:2 207482aaeb0SBram Moolenaar endif 208482aaeb0SBram Moolenaar" call Dret("NetUserPass") 209482aaeb0SBram Moolenaarendfun 210482aaeb0SBram Moolenaar 211482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 212482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1 213482aaeb0SBram Moolenaarlet &cpo= s:keepcpo 214482aaeb0SBram Moolenaarunlet s:keepcpo 215482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker 216