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