1482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2482aaeb0SBram Moolenaar" PLUGIN PORTION 3a5792f58SBram Moolenaar" Date: Oct 27, 2005 4482aaeb0SBram Moolenaar" Maintainer: Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz> 5482aaeb0SBram Moolenaar" GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim 6482aaeb0SBram Moolenaar" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{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 20482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 21482aaeb0SBram Moolenaar" Load Once: {{{1 22482aaeb0SBram Moolenaarif exists("g:loaded_netrw") 23482aaeb0SBram Moolenaar finish 24482aaeb0SBram Moolenaarendif 258349fd7cSBram Moolenaarif v:version < 700 268349fd7cSBram Moolenaar echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None 278349fd7cSBram Moolenaar finish 288349fd7cSBram Moolenaarendif 29482aaeb0SBram Moolenaarlet s:keepcpo= &cpo 30482aaeb0SBram Moolenaarset cpo&vim 31482aaeb0SBram Moolenaar 32482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 33482aaeb0SBram Moolenaar" Public Interface: {{{1 34482aaeb0SBram Moolenaar 35482aaeb0SBram Moolenaar" Local Browsing: {{{2 36482aaeb0SBram Moolenaaraugroup FileExplorer 37482aaeb0SBram Moolenaar au! 38b8a7b560SBram Moolenaar au BufEnter * silent! call s:LocalBrowse(expand("<amatch>")) 39482aaeb0SBram Moolenaaraugroup END 40482aaeb0SBram Moolenaar 41482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2 42482aaeb0SBram Moolenaaraugroup Network 43482aaeb0SBram Moolenaar au! 44482aaeb0SBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16") 45a5792f58SBram Moolenaar au BufReadCmd file://* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>")) 46482aaeb0SBram Moolenaar else 47a5792f58SBram Moolenaar au BufReadCmd file://* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>")) 48a5792f58SBram Moolenaar au BufReadCmd file://localhost/* exe "silent doau BufReadPre ".netrw#RFC2396(expand("<amatch>"))|exe 'e '.substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',"")|exe "silent doau BufReadPost ".netrw#RFC2396(expand("<amatch>")) 49482aaeb0SBram Moolenaar endif 50*0fd9289dSBram Moolenaar au BufReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau BufReadPre ".expand("<amatch>")|exe '2Nread "'.expand("<amatch>").'"'|exe "silent doau BufReadPost ".expand("<amatch>") 51b8a7b560SBram Moolenaar au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe "silent doau FileReadPre ".expand("<amatch>")|exe 'Nread "' .expand("<amatch>").'"'|exe "silent doau FileReadPost ".expand("<amatch>") 52b8a7b560SBram 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>") 53b8a7b560SBram Moolenaar au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://* exe "silent doau FileWritePre ".expand("<amatch>")|exe "'[,']".'Nwrite "' .expand("<amatch>").'"'|exe "silent doau FileWritePost ".expand("<amatch>") 54482aaeb0SBram Moolenaaraugroup END 55482aaeb0SBram Moolenaar 56482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2 57*0fd9289dSBram Moolenaarcom! -count=1 -nargs=* Nread call netrw#NetSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetRestorePosn() 58482aaeb0SBram Moolenaarcom! -range=% -nargs=* Nwrite call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn() 59482aaeb0SBram Moolenaarcom! -nargs=* NetUserPass call NetUserPass(<f-args>) 60*0fd9289dSBram Moolenaarcom! -nargs=+ Ncopy call netrw#NetObtain(<f-args>) 61482aaeb0SBram Moolenaar 62482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2 63482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) 64482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) 65482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) 66482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) 67482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) 68482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) 69482aaeb0SBram Moolenaar 70482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2 71482aaeb0SBram Moolenaarcom! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings() 72482aaeb0SBram Moolenaar 73b8a7b560SBram Moolenaar" Maps: 74b8a7b560SBram Moolenaarif !hasmapto('<Plug>NetrwBrowseX') 75b8a7b560SBram Moolenaar nmap <unique> gx <Plug>NetrwBrowseX 76b8a7b560SBram Moolenaarendif 77b8a7b560SBram Moolenaarnno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr> 78b8a7b560SBram Moolenaar 79482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 80482aaeb0SBram Moolenaar" LocalBrowse: {{{2 81482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname) 82482aaeb0SBram Moolenaar " unfortunate interaction -- debugging calls can't be used here; 83482aaeb0SBram Moolenaar " the BufEnter event causes triggering when attempts to write to 84482aaeb0SBram Moolenaar " the DBG buffer are made. 85482aaeb0SBram Moolenaar if isdirectory(a:dirname) 86b8a7b560SBram Moolenaar silent! call netrw#DirBrowse(a:dirname) 87482aaeb0SBram Moolenaar endif 88482aaeb0SBram Moolenaar " not a directory, ignore it 89482aaeb0SBram Moolenaarendfun 90482aaeb0SBram Moolenaar 91482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 92482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1 93482aaeb0SBram Moolenaarfun! NetrwStatusLine() 94482aaeb0SBram Moolenaar" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".") 95482aaeb0SBram 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") 96482aaeb0SBram Moolenaar let &stl= s:netrw_explore_stl 97482aaeb0SBram Moolenaar if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 98482aaeb0SBram Moolenaar if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 99482aaeb0SBram Moolenaar return "" 100482aaeb0SBram Moolenaar else 101482aaeb0SBram Moolenaar return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 102482aaeb0SBram Moolenaar endif 103482aaeb0SBram Moolenaarendfun 104482aaeb0SBram Moolenaar 105482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 106482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1 107482aaeb0SBram Moolenaar" Usage: :call NetUserPass() -- will prompt for userid and password 108482aaeb0SBram Moolenaar" :call NetUserPass("uid") -- will prompt for password 109482aaeb0SBram Moolenaar" :call NetUserPass("uid","password") -- sets global userid and password 110482aaeb0SBram Moolenaarfun! NetUserPass(...) 111482aaeb0SBram Moolenaar 112482aaeb0SBram Moolenaar " get/set userid 113482aaeb0SBram Moolenaar if a:0 == 0 114482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:0<".a:0.">)") 115482aaeb0SBram Moolenaar if !exists("g:netrw_uid") || g:netrw_uid == "" 116482aaeb0SBram Moolenaar " via prompt 117482aaeb0SBram Moolenaar let g:netrw_uid= input('Enter username: ') 118482aaeb0SBram Moolenaar endif 119482aaeb0SBram Moolenaar else " from command line 120482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:1<".a:1.">) {") 121482aaeb0SBram Moolenaar let g:netrw_uid= a:1 122482aaeb0SBram Moolenaar endif 123482aaeb0SBram Moolenaar 124482aaeb0SBram Moolenaar " get password 125482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt 126482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case <=1:") 127482aaeb0SBram Moolenaar let g:netrw_passwd= inputsecret("Enter Password: ") 128482aaeb0SBram Moolenaar else " from command line 129482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 130482aaeb0SBram Moolenaar let g:netrw_passwd=a:2 131482aaeb0SBram Moolenaar endif 132482aaeb0SBram Moolenaar" call Dret("NetUserPass") 133482aaeb0SBram Moolenaarendfun 134482aaeb0SBram Moolenaar 135482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 136482aaeb0SBram Moolenaar" NetReadFixup: this sort of function is typically written by the user {{{1 137482aaeb0SBram Moolenaar" to handle extra junk that their system's ftp dumps 138482aaeb0SBram Moolenaar" into the transfer. This function is provided as an 139482aaeb0SBram Moolenaar" example and as a fix for a Windows 95 problem: in my 140482aaeb0SBram Moolenaar" experience, win95's ftp always dumped four blank lines 141482aaeb0SBram Moolenaar" at the end of the transfer. 142482aaeb0SBram Moolenaarif has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp 143482aaeb0SBram Moolenaar fun! NetReadFixup(method, line1, line2) 144482aaeb0SBram Moolenaar" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")") 145482aaeb0SBram Moolenaar if method == 3 " ftp (no <.netrc>) 146482aaeb0SBram Moolenaar let fourblanklines= line2 - 3 147482aaeb0SBram Moolenaar silent fourblanklines.",".line2."g/^\s*/d" 148482aaeb0SBram Moolenaar endif 149482aaeb0SBram Moolenaar" call Dret("NetReadFixup") 150482aaeb0SBram Moolenaar endfun 151482aaeb0SBram Moolenaarendif 152482aaeb0SBram Moolenaar 153482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 154482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1 155482aaeb0SBram Moolenaarlet &cpo= s:keepcpo 156482aaeb0SBram Moolenaarunlet s:keepcpo 157482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker 158