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! 38*b8a7b560SBram 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*b8a7b560SBram 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>") 51*b8a7b560SBram 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>") 52*b8a7b560SBram 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>") 53*b8a7b560SBram 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 57482aaeb0SBram Moolenaarcom! -nargs=* Nread call netrw#NetSavePosn()<bar>call netrw#NetRead(<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>) 60482aaeb0SBram Moolenaar 61482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2 62482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) 63482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) 64482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) 65482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang -count=0 Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) 66482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) 67482aaeb0SBram Moolenaarcom! -nargs=? -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) 68482aaeb0SBram Moolenaar 69482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2 70482aaeb0SBram Moolenaarcom! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings() 71482aaeb0SBram Moolenaar 72*b8a7b560SBram Moolenaar" Maps: 73*b8a7b560SBram Moolenaarif !hasmapto('<Plug>NetrwBrowseX') 74*b8a7b560SBram Moolenaar nmap <unique> gx <Plug>NetrwBrowseX 75*b8a7b560SBram Moolenaarendif 76*b8a7b560SBram Moolenaarnno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr> 77*b8a7b560SBram Moolenaar 78482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 79482aaeb0SBram Moolenaar" LocalBrowse: {{{2 80482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname) 81482aaeb0SBram Moolenaar " unfortunate interaction -- debugging calls can't be used here; 82482aaeb0SBram Moolenaar " the BufEnter event causes triggering when attempts to write to 83482aaeb0SBram Moolenaar " the DBG buffer are made. 84482aaeb0SBram Moolenaar if isdirectory(a:dirname) 85*b8a7b560SBram Moolenaar silent! call netrw#DirBrowse(a:dirname) 86482aaeb0SBram Moolenaar endif 87482aaeb0SBram Moolenaar " not a directory, ignore it 88482aaeb0SBram Moolenaarendfun 89482aaeb0SBram Moolenaar 90482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 91482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1 92482aaeb0SBram Moolenaarfun! NetrwStatusLine() 93482aaeb0SBram Moolenaar" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr(".")." Xline#".w:netrw_explore_line." line#".line(".") 94482aaeb0SBram 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") 95482aaeb0SBram Moolenaar let &stl= s:netrw_explore_stl 96482aaeb0SBram Moolenaar if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 97482aaeb0SBram Moolenaar if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 98482aaeb0SBram Moolenaar return "" 99482aaeb0SBram Moolenaar else 100482aaeb0SBram Moolenaar return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 101482aaeb0SBram Moolenaar endif 102482aaeb0SBram Moolenaarendfun 103482aaeb0SBram Moolenaar 104482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 105482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1 106482aaeb0SBram Moolenaar" Usage: :call NetUserPass() -- will prompt for userid and password 107482aaeb0SBram Moolenaar" :call NetUserPass("uid") -- will prompt for password 108482aaeb0SBram Moolenaar" :call NetUserPass("uid","password") -- sets global userid and password 109482aaeb0SBram Moolenaarfun! NetUserPass(...) 110482aaeb0SBram Moolenaar 111482aaeb0SBram Moolenaar " get/set userid 112482aaeb0SBram Moolenaar if a:0 == 0 113482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:0<".a:0.">)") 114482aaeb0SBram Moolenaar if !exists("g:netrw_uid") || g:netrw_uid == "" 115482aaeb0SBram Moolenaar " via prompt 116482aaeb0SBram Moolenaar let g:netrw_uid= input('Enter username: ') 117482aaeb0SBram Moolenaar endif 118482aaeb0SBram Moolenaar else " from command line 119482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:1<".a:1.">) {") 120482aaeb0SBram Moolenaar let g:netrw_uid= a:1 121482aaeb0SBram Moolenaar endif 122482aaeb0SBram Moolenaar 123482aaeb0SBram Moolenaar " get password 124482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt 125482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case <=1:") 126482aaeb0SBram Moolenaar let g:netrw_passwd= inputsecret("Enter Password: ") 127482aaeb0SBram Moolenaar else " from command line 128482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 129482aaeb0SBram Moolenaar let g:netrw_passwd=a:2 130482aaeb0SBram Moolenaar endif 131482aaeb0SBram Moolenaar" call Dret("NetUserPass") 132482aaeb0SBram Moolenaarendfun 133482aaeb0SBram Moolenaar 134482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 135482aaeb0SBram Moolenaar" NetReadFixup: this sort of function is typically written by the user {{{1 136482aaeb0SBram Moolenaar" to handle extra junk that their system's ftp dumps 137482aaeb0SBram Moolenaar" into the transfer. This function is provided as an 138482aaeb0SBram Moolenaar" example and as a fix for a Windows 95 problem: in my 139482aaeb0SBram Moolenaar" experience, win95's ftp always dumped four blank lines 140482aaeb0SBram Moolenaar" at the end of the transfer. 141482aaeb0SBram Moolenaarif has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp 142482aaeb0SBram Moolenaar fun! NetReadFixup(method, line1, line2) 143482aaeb0SBram Moolenaar" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")") 144482aaeb0SBram Moolenaar if method == 3 " ftp (no <.netrc>) 145482aaeb0SBram Moolenaar let fourblanklines= line2 - 3 146482aaeb0SBram Moolenaar silent fourblanklines.",".line2."g/^\s*/d" 147482aaeb0SBram Moolenaar endif 148482aaeb0SBram Moolenaar" call Dret("NetReadFixup") 149482aaeb0SBram Moolenaar endfun 150482aaeb0SBram Moolenaarendif 151482aaeb0SBram Moolenaar 152482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 153482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1 154482aaeb0SBram Moolenaarlet &cpo= s:keepcpo 155482aaeb0SBram Moolenaarunlet s:keepcpo 156482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker 157