1*482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2*482aaeb0SBram Moolenaar" PLUGIN PORTION 3*482aaeb0SBram Moolenaar" Date: Sep 08, 2005 4*482aaeb0SBram Moolenaar" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz> 5*482aaeb0SBram Moolenaar" License: Vim License (see vim's :help license) 6*482aaeb0SBram Moolenaar" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 7*482aaeb0SBram Moolenaar" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1 8*482aaeb0SBram Moolenaar" Permission is hereby granted to use and distribute this code, 9*482aaeb0SBram Moolenaar" with or without modifications, provided that this copyright 10*482aaeb0SBram Moolenaar" notice is copied with it. Like anything else that's free, 11*482aaeb0SBram Moolenaar" netrw.vim, netrwPlugin.vim, and netrwSettings.vim are provided 12*482aaeb0SBram Moolenaar" *as is* and comes with no warranty of any kind, either 13*482aaeb0SBram Moolenaar" expressed or implied. By using this plugin, you agree that 14*482aaeb0SBram Moolenaar" in no event will the copyright holder be liable for any damages 15*482aaeb0SBram Moolenaar" resulting from the use of this software. 16*482aaeb0SBram Moolenaar" 17*482aaeb0SBram Moolenaar" But be doers of the Word, and not only hearers, deluding your own selves {{{1 18*482aaeb0SBram Moolenaar" (James 1:22 RSV) 19*482aaeb0SBram Moolenaar" =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 20*482aaeb0SBram Moolenaar 21*482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 22*482aaeb0SBram Moolenaar" Load Once: {{{1 23*482aaeb0SBram Moolenaarif exists("g:loaded_netrw") 24*482aaeb0SBram Moolenaar finish 25*482aaeb0SBram Moolenaarendif 26*482aaeb0SBram Moolenaarlet s:keepcpo= &cpo 27*482aaeb0SBram Moolenaarset cpo&vim 28*482aaeb0SBram Moolenaar 29*482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 30*482aaeb0SBram Moolenaar" Public Interface: {{{1 31*482aaeb0SBram Moolenaar 32*482aaeb0SBram Moolenaar" Local Browsing: {{{2 33*482aaeb0SBram Moolenaaraugroup FileExplorer 34*482aaeb0SBram Moolenaar au! 35*482aaeb0SBram Moolenaar au BufEnter * call s:LocalBrowse(expand("<amatch>")) 36*482aaeb0SBram Moolenaaraugroup END 37*482aaeb0SBram Moolenaar 38*482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2 39*482aaeb0SBram Moolenaaraugroup Network 40*482aaeb0SBram Moolenaar au! 41*482aaeb0SBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16") 42*482aaeb0SBram Moolenaar au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e '.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>") 43*482aaeb0SBram Moolenaar else 44*482aaeb0SBram Moolenaar au BufReadCmd file:///* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e /'.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>") 45*482aaeb0SBram Moolenaar au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".expand("<amatch>")|exe 'e /'.substitute(expand("<amatch>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<amatch>") 46*482aaeb0SBram Moolenaar endif 47*482aaeb0SBram Moolenaar au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe "Nread 0r ".expand("<amatch>")|exe "silent doau BufReadPost ".expand("<amatch>") 48*482aaeb0SBram Moolenaar au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe "Nread " .expand("<amatch>")|exe "silent doau FileReadPost ".expand("<amatch>") 49*482aaeb0SBram Moolenaar au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe "Nwrite " .expand("<amatch>")|exe "silent doau BufWritePost ".expand("<amatch>") 50*482aaeb0SBram Moolenaar au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau BufWritePre ".expand("<amatch>")|exe "'[,']Nwrite " .expand("<amatch>")|exe "silent doau FileWritePost ".expand("<amatch>") 51*482aaeb0SBram Moolenaaraugroup END 52*482aaeb0SBram Moolenaar 53*482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2 54*482aaeb0SBram Moolenaarcom! -nargs=* Nread call netrw#NetSavePosn()<bar>call netrw#NetRead(<f-args>)<bar>call netrw#NetRestorePosn() 55*482aaeb0SBram Moolenaarcom! -range=% -nargs=* Nwrite call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn() 56*482aaeb0SBram Moolenaarcom! -nargs=* NetUserPass call NetUserPass(<f-args>) 57*482aaeb0SBram Moolenaar 58*482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2 59*482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) 60*482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) 61*482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) 62*482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) 63*482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) 64*482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) 65*482aaeb0SBram Moolenaar 66*482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2 67*482aaeb0SBram Moolenaarcom! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings() 68*482aaeb0SBram Moolenaar 69*482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 70*482aaeb0SBram Moolenaar" LocalBrowse: {{{2 71*482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname) 72*482aaeb0SBram Moolenaar " unfortunate interaction -- debugging calls can't be used here; 73*482aaeb0SBram Moolenaar " the BufEnter event causes triggering when attempts to write to 74*482aaeb0SBram Moolenaar " the DBG buffer are made. 75*482aaeb0SBram Moolenaar if isdirectory(a:dirname) 76*482aaeb0SBram Moolenaar call netrw#DirBrowse(a:dirname) 77*482aaeb0SBram Moolenaar endif 78*482aaeb0SBram Moolenaar " not a directory, ignore it 79*482aaeb0SBram Moolenaarendfun 80*482aaeb0SBram Moolenaar 81*482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 82*482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1 83*482aaeb0SBram Moolenaarfun! NetrwStatusLine() 84*482aaeb0SBram Moolenaar" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".") 85*482aaeb0SBram 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") 86*482aaeb0SBram Moolenaar let &stl= s:netrw_explore_stl 87*482aaeb0SBram Moolenaar if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 88*482aaeb0SBram Moolenaar if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 89*482aaeb0SBram Moolenaar return "" 90*482aaeb0SBram Moolenaar else 91*482aaeb0SBram Moolenaar return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 92*482aaeb0SBram Moolenaar endif 93*482aaeb0SBram Moolenaarendfun 94*482aaeb0SBram Moolenaar 95*482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 96*482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1 97*482aaeb0SBram Moolenaar" Usage: :call NetUserPass() -- will prompt for userid and password 98*482aaeb0SBram Moolenaar" :call NetUserPass("uid") -- will prompt for password 99*482aaeb0SBram Moolenaar" :call NetUserPass("uid","password") -- sets global userid and password 100*482aaeb0SBram Moolenaarfun! NetUserPass(...) 101*482aaeb0SBram Moolenaar 102*482aaeb0SBram Moolenaar " get/set userid 103*482aaeb0SBram Moolenaar if a:0 == 0 104*482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:0<".a:0.">)") 105*482aaeb0SBram Moolenaar if !exists("g:netrw_uid") || g:netrw_uid == "" 106*482aaeb0SBram Moolenaar " via prompt 107*482aaeb0SBram Moolenaar let g:netrw_uid= input('Enter username: ') 108*482aaeb0SBram Moolenaar endif 109*482aaeb0SBram Moolenaar else " from command line 110*482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:1<".a:1.">) {") 111*482aaeb0SBram Moolenaar let g:netrw_uid= a:1 112*482aaeb0SBram Moolenaar endif 113*482aaeb0SBram Moolenaar 114*482aaeb0SBram Moolenaar " get password 115*482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt 116*482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case <=1:") 117*482aaeb0SBram Moolenaar let g:netrw_passwd= inputsecret("Enter Password: ") 118*482aaeb0SBram Moolenaar else " from command line 119*482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 120*482aaeb0SBram Moolenaar let g:netrw_passwd=a:2 121*482aaeb0SBram Moolenaar endif 122*482aaeb0SBram Moolenaar" call Dret("NetUserPass") 123*482aaeb0SBram Moolenaarendfun 124*482aaeb0SBram Moolenaar 125*482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 126*482aaeb0SBram Moolenaar" NetReadFixup: this sort of function is typically written by the user {{{1 127*482aaeb0SBram Moolenaar" to handle extra junk that their system's ftp dumps 128*482aaeb0SBram Moolenaar" into the transfer. This function is provided as an 129*482aaeb0SBram Moolenaar" example and as a fix for a Windows 95 problem: in my 130*482aaeb0SBram Moolenaar" experience, win95's ftp always dumped four blank lines 131*482aaeb0SBram Moolenaar" at the end of the transfer. 132*482aaeb0SBram Moolenaarif has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp 133*482aaeb0SBram Moolenaar fun! NetReadFixup(method, line1, line2) 134*482aaeb0SBram Moolenaar" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")") 135*482aaeb0SBram Moolenaar if method == 3 " ftp (no <.netrc>) 136*482aaeb0SBram Moolenaar let fourblanklines= line2 - 3 137*482aaeb0SBram Moolenaar silent fourblanklines.",".line2."g/^\s*/d" 138*482aaeb0SBram Moolenaar endif 139*482aaeb0SBram Moolenaar" call Dret("NetReadFixup") 140*482aaeb0SBram Moolenaar endfun 141*482aaeb0SBram Moolenaarendif 142*482aaeb0SBram Moolenaar 143*482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 144*482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1 145*482aaeb0SBram Moolenaarlet &cpo= s:keepcpo 146*482aaeb0SBram Moolenaarunlet s:keepcpo 147*482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker 148