1482aaeb0SBram Moolenaar" netrwPlugin.vim: Handles file transfer and remote directory listing across a network 2*dd2a3cdaSBram Moolenaar" PLUGIN SECTION 3*dd2a3cdaSBram Moolenaar" Date: Jan 05, 2007 4*dd2a3cdaSBram Moolenaar" Maintainer: Charles E Campbell, Jr <[email protected]> 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 22*dd2a3cdaSBram Moolenaarif &cp || exists("g:loaded_netrwPlugin") 23482aaeb0SBram Moolenaar finish 24482aaeb0SBram Moolenaarendif 25*dd2a3cdaSBram Moolenaarlet g:loaded_netrwPlugin = 1 26*dd2a3cdaSBram Moolenaarlet s:keepcpo = &cpo 278349fd7cSBram Moolenaarif v:version < 700 288349fd7cSBram Moolenaar echohl WarningMsg | echo "***netrw*** you need vim version 7.0 for this version of netrw" | echohl None 298349fd7cSBram Moolenaar finish 308349fd7cSBram Moolenaarendif 31482aaeb0SBram Moolenaarlet s:keepcpo= &cpo 32482aaeb0SBram Moolenaarset cpo&vim 33482aaeb0SBram Moolenaar 34482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 35482aaeb0SBram Moolenaar" Public Interface: {{{1 36482aaeb0SBram Moolenaar 37482aaeb0SBram Moolenaar" Local Browsing: {{{2 38482aaeb0SBram Moolenaaraugroup FileExplorer 39482aaeb0SBram Moolenaar au! 40b8a7b560SBram Moolenaar au BufEnter * silent! call s:LocalBrowse(expand("<amatch>")) 41*dd2a3cdaSBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16") 42*dd2a3cdaSBram Moolenaar au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>")) 43*dd2a3cdaSBram Moolenaar endif 44482aaeb0SBram Moolenaaraugroup END 45482aaeb0SBram Moolenaar 46482aaeb0SBram Moolenaar" Network Browsing Reading Writing: {{{2 47482aaeb0SBram Moolenaaraugroup Network 48482aaeb0SBram Moolenaar au! 49482aaeb0SBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16") 50a5792f58SBram 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>")) 51482aaeb0SBram Moolenaar else 52a5792f58SBram 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>")) 53a5792f58SBram 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>")) 54482aaeb0SBram Moolenaar endif 550fd9289dSBram 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>") 56b8a7b560SBram 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>") 57b8a7b560SBram 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>") 58b8a7b560SBram 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>") 59*dd2a3cdaSBram Moolenaar try 60*dd2a3cdaSBram Moolenaar au SourceCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe 'Nsource "'.expand("<amatch>").'"' 61*dd2a3cdaSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E216/ 62*dd2a3cdaSBram Moolenaar au SourcePre ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://* exe 'Nsource "'.expand("<amatch>").'"' 63*dd2a3cdaSBram Moolenaar endtry 64482aaeb0SBram Moolenaaraugroup END 65482aaeb0SBram Moolenaar 66482aaeb0SBram Moolenaar" Commands: :Nread, :Nwrite, :NetUserPass {{{2 670fd9289dSBram Moolenaarcom! -count=1 -nargs=* Nread call netrw#NetSavePosn()<bar>call netrw#NetRead(<count>,<f-args>)<bar>call netrw#NetRestorePosn() 68482aaeb0SBram Moolenaarcom! -range=% -nargs=* Nwrite call netrw#NetSavePosn()<bar><line1>,<line2>call netrw#NetWrite(<f-args>)<bar>call netrw#NetRestorePosn() 69482aaeb0SBram Moolenaarcom! -nargs=* NetUserPass call NetUserPass(<f-args>) 700fd9289dSBram Moolenaarcom! -nargs=+ Ncopy call netrw#NetObtain(<f-args>) 71*dd2a3cdaSBram Moolenaarcom! -nargs=* Nsource call netrw#NetSavePosn()<bar>call netrw#NetSource(<f-args>)<bar>call netrw#NetRestorePosn() 72482aaeb0SBram Moolenaar 73482aaeb0SBram Moolenaar" Commands: :Explore, :Sexplore, Hexplore, Vexplore {{{2 74*dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Explore call netrw#Explore(<count>,0,0+<bang>0,<q-args>) 75*dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Sexplore call netrw#Explore(<count>,1,0+<bang>0,<q-args>) 76*dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Hexplore call netrw#Explore(<count>,1,2+<bang>0,<q-args>) 77*dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang -count=0 -complete=dir Vexplore call netrw#Explore(<count>,1,4+<bang>0,<q-args>) 78*dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -count=0 -complete=dir Texplore call netrw#Explore(<count>,0,6 ,<q-args>) 79*dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang Nexplore call netrw#Explore(-1,0,0,<q-args>) 80*dd2a3cdaSBram Moolenaarcom! -nargs=* -bar -bang Pexplore call netrw#Explore(-2,0,0,<q-args>) 81482aaeb0SBram Moolenaar 82482aaeb0SBram Moolenaar" Commands: NetrwSettings {{{2 83482aaeb0SBram Moolenaarcom! -nargs=0 NetrwSettings :call netrwSettings#NetrwSettings() 84482aaeb0SBram Moolenaar 85b8a7b560SBram Moolenaar" Maps: 86*dd2a3cdaSBram Moolenaarif !exists("g:netrw_nogx") && maparg('g','n') == "" 87b8a7b560SBram Moolenaar if !hasmapto('<Plug>NetrwBrowseX') 88b8a7b560SBram Moolenaar nmap <unique> gx <Plug>NetrwBrowseX 89b8a7b560SBram Moolenaar endif 90b8a7b560SBram Moolenaar nno <silent> <Plug>NetrwBrowseX :call netrw#NetBrowseX(expand("<cWORD>"),0)<cr> 91*dd2a3cdaSBram Moolenaarendif 92b8a7b560SBram Moolenaar 93482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 94482aaeb0SBram Moolenaar" LocalBrowse: {{{2 95482aaeb0SBram Moolenaarfun! s:LocalBrowse(dirname) 96482aaeb0SBram Moolenaar " unfortunate interaction -- debugging calls can't be used here; 97482aaeb0SBram Moolenaar " the BufEnter event causes triggering when attempts to write to 98482aaeb0SBram Moolenaar " the DBG buffer are made. 99*dd2a3cdaSBram Moolenaar" echomsg "dirname<".a:dirname.">" 100*dd2a3cdaSBram Moolenaar if has("amiga") 101*dd2a3cdaSBram Moolenaar " The check against '' is made for the Amiga, where the empty 102*dd2a3cdaSBram Moolenaar " string is the current directory and not checking would break 103*dd2a3cdaSBram Moolenaar " things such as the help command. 104*dd2a3cdaSBram Moolenaar if a:dirname != '' && isdirectory(a:dirname) 105*dd2a3cdaSBram Moolenaar silent! call netrw#LocalBrowseCheck(a:dirname) 106*dd2a3cdaSBram Moolenaar endif 107*dd2a3cdaSBram Moolenaar elseif isdirectory(a:dirname) 108*dd2a3cdaSBram Moolenaar" echomsg "dirname<".dirname."> isdir" 109*dd2a3cdaSBram Moolenaar silent! call netrw#LocalBrowseCheck(a:dirname) 110482aaeb0SBram Moolenaar endif 111482aaeb0SBram Moolenaar " not a directory, ignore it 112482aaeb0SBram Moolenaarendfun 113482aaeb0SBram Moolenaar 114482aaeb0SBram Moolenaar" --------------------------------------------------------------------- 115482aaeb0SBram Moolenaar" NetrwStatusLine: {{{1 116482aaeb0SBram Moolenaarfun! NetrwStatusLine() 117af48b092SBram Moolenaar" let g:stlmsg= "Xbufnr=".w:netrw_explore_bufnr." bufnr=".bufnr("%")." Xline#".w:netrw_explore_line." line#".line(".") 118af48b092SBram 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") 119482aaeb0SBram Moolenaar let &stl= s:netrw_explore_stl 120482aaeb0SBram Moolenaar if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif 121482aaeb0SBram Moolenaar if exists("w:netrw_explore_line")|unlet w:netrw_explore_line|endif 122482aaeb0SBram Moolenaar return "" 123482aaeb0SBram Moolenaar else 124482aaeb0SBram Moolenaar return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen 125482aaeb0SBram Moolenaar endif 126482aaeb0SBram Moolenaarendfun 127482aaeb0SBram Moolenaar 128482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 129482aaeb0SBram Moolenaar" NetUserPass: set username and password for subsequent ftp transfer {{{1 130482aaeb0SBram Moolenaar" Usage: :call NetUserPass() -- will prompt for userid and password 131482aaeb0SBram Moolenaar" :call NetUserPass("uid") -- will prompt for password 132482aaeb0SBram Moolenaar" :call NetUserPass("uid","password") -- sets global userid and password 133482aaeb0SBram Moolenaarfun! NetUserPass(...) 134482aaeb0SBram Moolenaar 135482aaeb0SBram Moolenaar " get/set userid 136482aaeb0SBram Moolenaar if a:0 == 0 137482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:0<".a:0.">)") 138482aaeb0SBram Moolenaar if !exists("g:netrw_uid") || g:netrw_uid == "" 139482aaeb0SBram Moolenaar " via prompt 140482aaeb0SBram Moolenaar let g:netrw_uid= input('Enter username: ') 141482aaeb0SBram Moolenaar endif 142482aaeb0SBram Moolenaar else " from command line 143482aaeb0SBram Moolenaar" call Dfunc("NetUserPass(a:1<".a:1.">) {") 144482aaeb0SBram Moolenaar let g:netrw_uid= a:1 145482aaeb0SBram Moolenaar endif 146482aaeb0SBram Moolenaar 147482aaeb0SBram Moolenaar " get password 148482aaeb0SBram Moolenaar if a:0 <= 1 " via prompt 149482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case <=1:") 150482aaeb0SBram Moolenaar let g:netrw_passwd= inputsecret("Enter Password: ") 151482aaeb0SBram Moolenaar else " from command line 152482aaeb0SBram Moolenaar" call Decho("a:0=".a:0." case >1: a:2<".a:2.">") 153482aaeb0SBram Moolenaar let g:netrw_passwd=a:2 154482aaeb0SBram Moolenaar endif 155482aaeb0SBram Moolenaar" call Dret("NetUserPass") 156482aaeb0SBram Moolenaarendfun 157482aaeb0SBram Moolenaar 158482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 159482aaeb0SBram Moolenaar" NetReadFixup: this sort of function is typically written by the user {{{1 160482aaeb0SBram Moolenaar" to handle extra junk that their system's ftp dumps 161482aaeb0SBram Moolenaar" into the transfer. This function is provided as an 162482aaeb0SBram Moolenaar" example and as a fix for a Windows 95 problem: in my 163482aaeb0SBram Moolenaar" experience, win95's ftp always dumped four blank lines 164482aaeb0SBram Moolenaar" at the end of the transfer. 165482aaeb0SBram Moolenaarif has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp 166482aaeb0SBram Moolenaar fun! NetReadFixup(method, line1, line2) 167482aaeb0SBram Moolenaar" call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")") 168482aaeb0SBram Moolenaar if method == 3 " ftp (no <.netrc>) 169482aaeb0SBram Moolenaar let fourblanklines= line2 - 3 170482aaeb0SBram Moolenaar silent fourblanklines.",".line2."g/^\s*/d" 171482aaeb0SBram Moolenaar endif 172482aaeb0SBram Moolenaar" call Dret("NetReadFixup") 173482aaeb0SBram Moolenaar endfun 174482aaeb0SBram Moolenaarendif 175482aaeb0SBram Moolenaar 176482aaeb0SBram Moolenaar" ------------------------------------------------------------------------ 177482aaeb0SBram Moolenaar" Modelines And Restoration: {{{1 178482aaeb0SBram Moolenaarlet &cpo= s:keepcpo 179482aaeb0SBram Moolenaarunlet s:keepcpo 180482aaeb0SBram Moolenaar" vim:ts=8 fdm=marker 181