Mercurial > vim
comparison runtime/plugin/netrw.vim @ 15:631143ac4a01 v7.0007
updated for version 7.0007
author | vimboss |
---|---|
date | Sat, 10 Jul 2004 09:47:34 +0000 |
parents | bdeee1504ac1 |
children | db5102f7e29f |
comparison
equal
deleted
inserted
replaced
14:946da5994c01 | 15:631143ac4a01 |
---|---|
1 " netrw.vim: Handles file transfer and remote directory listing across a network | 1 " netrw.vim: Handles file transfer and remote directory listing across a network |
2 " Last Change: Jun 30, 2004 | 2 " Last Change: Jul 08, 2004 |
3 " Maintainer: Charles E. Campbell, Jr. PhD <drchipNOSPAM at campbellfamily.biz> | 3 " Maintainer: Charles E. Campbell, Jr. PhD <drchipNOSPAM at campbellfamily.biz> |
4 " Version: 47g ASTRO-ONLY | 4 " Version: 47l ASTRO-ONLY |
5 " License: Vim License (see vim's :help license) | 5 " License: Vim License (see vim's :help license) |
6 " | 6 " |
7 " But be doers of the word, and not only hearers, deluding your own selves | 7 " But be doers of the word, and not only hearers, deluding your own selves |
8 " (James 1:22 RSV) | 8 " (James 1:22 RSV) |
9 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | 9 " =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- |
10 | 10 |
11 " Exit quickly when already loaded or when 'compatible' is set. {{{1 | 11 " Exit quickly when already loaded or when 'compatible' is set. {{{1 |
12 if exists("loaded_netrw") || &cp | 12 if exists("loaded_netrw") || &cp |
13 finish | 13 finish |
14 endif | 14 endif |
15 let loaded_netrw = "v47g ASTRO-ONLY" | 15 let loaded_netrw = "v47l ASTRO-ONLY" |
16 let s:save_cpo = &cpo | 16 let s:save_cpo = &cpo |
17 let loaded_explorer = 1 | |
17 set cpo&vim | 18 set cpo&vim |
18 | 19 |
19 " --------------------------------------------------------------------- | 20 " --------------------------------------------------------------------- |
20 " Default values for global netrw variables {{{1 | 21 " Default values for global netrw variables {{{1 |
21 if !exists("g:netrw_ftpmode") | 22 if !exists("g:netrw_ftpmode") |
72 endif | 73 endif |
73 if !exists("g:netrw_sort_direction") | 74 if !exists("g:netrw_sort_direction") |
74 " alternative: reverse (z y x ...) | 75 " alternative: reverse (z y x ...) |
75 let g:netrw_sort_direction= "normal" | 76 let g:netrw_sort_direction= "normal" |
76 endif | 77 endif |
78 if !exists("g:netrw_longlist") || g:netrw_longlist == 0 | |
79 let g:netrw_longlist= 0 | |
80 else | |
81 let g:netrw_longlist= 1 | |
82 let g:netrw_list_cmd= "ssh HOSTNAME ls -FLa -l" | |
83 endif | |
84 if !exists("g:netrw_timefmt") | |
85 let g:netrw_timefmt= "%c" | |
86 endif | |
87 if !exists("g:netrw_local_rmdir") | |
88 let g:netrw_local_rmdir= "rmdir" | |
89 endif | |
90 if !exists("g:netrw_local_rename") | |
91 if has("win32") | |
92 let g:netrw_local_rename= "ren" | |
93 elseif has("unix") | |
94 let g:netrw_local_rename= "mv" | |
95 endif | |
96 endif | |
97 if !exists("g:netrw_local_mkdir") | |
98 let g:netrw_local_mkdir= "mkdir" | |
99 endif | |
100 if !exists("g:netrw_mkdir_cmd") | |
101 let g:netrw_mkdir_cmd= "ssh HOSTNAME mkdir" | |
102 endif | |
103 | |
104 " BufEnter event ignored by decho when following variable is true | |
105 " Has a side effect that doau BufReadPost doesn't work, so | |
106 " files read by network transfer aren't appropriately highlighted. | |
107 "let g:decho_bufenter = 1 "Decho | |
77 | 108 |
78 " --------------------------------------------------------------------- | 109 " --------------------------------------------------------------------- |
79 " Default values for global protocol variables {{{1 | 110 " Default values for global protocol variables {{{1 |
80 if !exists("g:netrw_rcp_cmd") | 111 if !exists("g:netrw_rcp_cmd") |
81 let g:netrw_rcp_cmd = "rcp" | 112 let g:netrw_rcp_cmd = "rcp" |
123 let s:netrw_rcpmode = '' | 154 let s:netrw_rcpmode = '' |
124 endif | 155 endif |
125 | 156 |
126 " --------------------------------------------------------------------- | 157 " --------------------------------------------------------------------- |
127 " Transparency Support: {{{1 | 158 " Transparency Support: {{{1 |
128 " Auto-detection for ftp://*, rcp://*, scp://*, sftp://*, http://*, dav://*, | 159 " File Explorer: {{{2 |
129 " and rsync://* | |
130 " Should make file transfers across networks transparent. Currently I haven't | |
131 " supported appends. Hey, gotta leave something for a future <netrw.vim>! | |
132 if version >= 600 | 160 if version >= 600 |
161 augroup FileExplorer | |
162 au! | |
163 au BufEnter * call <SID>LocalBrowse(expand("<afile>")) | |
164 augroup END | |
165 " Network Handler: {{{2 | |
133 augroup Network | 166 augroup Network |
134 au! | 167 au! |
135 if has("win32") | 168 if has("win32") |
136 au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>") | 169 au BufReadCmd file://* exe "silent doau BufReadPre ".expand("<afile>")|exe 'e '.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>") |
137 else | 170 else |
326 " ftp + <.netrc>: NetRead Method #2 | 359 " ftp + <.netrc>: NetRead Method #2 |
327 elseif b:netrw_method == 2 " read with ftp + <.netrc> | 360 elseif b:netrw_method == 2 " read with ftp + <.netrc> |
328 " call Decho("read via ftp+.netrc (method #2)") | 361 " call Decho("read via ftp+.netrc (method #2)") |
329 let netrw_fname= b:netrw_fname | 362 let netrw_fname= b:netrw_fname |
330 new | 363 new |
331 set ff=unix | 364 setlocal ff=unix |
332 exe "put ='".g:netrw_ftpmode."'" | 365 exe "put ='".g:netrw_ftpmode."'" |
333 exe "put ='get ".netrw_fname." ".tmpfile."'" | 366 exe "put ='get ".netrw_fname." ".tmpfile."'" |
334 if exists("g:netrw_port") && g:netrw_port != "" | 367 if exists("g:netrw_port") && g:netrw_port != "" |
335 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) | 368 " call Decho("executing: %!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port) |
336 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port | 369 exe g:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port |
351 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname | 384 elseif b:netrw_method == 3 " read with ftp + machine, id, passwd, and fname |
352 " Construct execution string (four lines) which will be passed through filter | 385 " Construct execution string (four lines) which will be passed through filter |
353 " call Decho("read via ftp+mipf (method #3)") | 386 " call Decho("read via ftp+mipf (method #3)") |
354 let netrw_fname= b:netrw_fname | 387 let netrw_fname= b:netrw_fname |
355 new | 388 new |
356 set ff=unix | 389 setlocal ff=unix |
357 if exists("g:netrw_port") && g:netrw_port != "" | 390 if exists("g:netrw_port") && g:netrw_port != "" |
358 put ='open '.g:netrw_machine.' '.g:netrw_port | 391 put ='open '.g:netrw_machine.' '.g:netrw_port |
359 else | 392 else |
360 put ='open '.g:netrw_machine | 393 put ='open '.g:netrw_machine |
361 endif | 394 endif |
442 " call Decho("read via cadaver (method #6)") | 475 " call Decho("read via cadaver (method #6)") |
443 | 476 |
444 " Construct execution string (four lines) which will be passed through filter | 477 " Construct execution string (four lines) which will be passed through filter |
445 let netrw_fname= b:netrw_fname | 478 let netrw_fname= b:netrw_fname |
446 new | 479 new |
447 set ff=unix | 480 setlocal ff=unix |
448 if exists("g:netrw_port") && g:netrw_port != "" | 481 if exists("g:netrw_port") && g:netrw_port != "" |
449 put ='open '.g:netrw_machine.' '.g:netrw_port | 482 put ='open '.g:netrw_machine.' '.g:netrw_port |
450 else | 483 else |
451 put ='open '.g:netrw_machine | 484 put ='open '.g:netrw_machine |
452 endif | 485 endif |
536 unlet b:netrw_method | 569 unlet b:netrw_method |
537 unlet g:netrw_machine | 570 unlet g:netrw_machine |
538 unlet b:netrw_fname | 571 unlet b:netrw_fname |
539 endif | 572 endif |
540 call s:NetOptionRestore() | 573 call s:NetOptionRestore() |
541 | 574 |
542 " call Dret("NetRead") | 575 " call Dret("NetRead") |
543 endfun | 576 endfun |
544 " end of NetRead | 577 " end of NetRead |
545 | 578 |
546 " ------------------------------------------------------------------------ | 579 " ------------------------------------------------------------------------ |
612 " the ":f newname" apparently leaves the temporary file as the alternate | 645 " the ":f newname" apparently leaves the temporary file as the alternate |
613 " file in the buffer list (see :ls!). The following command wipes it out. | 646 " file in the buffer list (see :ls!). The following command wipes it out. |
614 exe bufnr("#")."bwipe!" | 647 exe bufnr("#")."bwipe!" |
615 else | 648 else |
616 let oldul= &ul | 649 let oldul= &ul |
617 set ul=-1 | 650 setlocal ul=-1 |
618 exe a:readcmd." ".v:cmdarg." ".fname | 651 exe a:readcmd." ".v:cmdarg." ".fname |
619 if delline > 0 | 652 if delline > 0 |
620 " wipe out last line, which should be a blank line anyway | 653 " wipe out last line, which should be a blank line anyway |
621 $del | 654 $del |
622 endif | 655 endif |
638 else | 671 else |
639 let line2= line("$") - line2 | 672 let line2= line("$") - line2 |
640 endif | 673 endif |
641 " call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")") | 674 " call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")") |
642 call NetReadFixup(a:method, line1, line2) | 675 call NetReadFixup(a:method, line1, line2) |
676 endif | |
677 | |
678 " update the Buffers menu | |
679 if has("gui") && has("gui_running") | |
680 silent! emenu Buffers.Refresh\ menu | |
643 endif | 681 endif |
644 | 682 |
645 " call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname)) | 683 " call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> fname<".a:fname."> readable=".filereadable(a:fname)) |
646 | 684 |
647 " insure that we have the right filetype and that its being displayed | 685 " insure that we have the right filetype and that its being displayed |
761 "......................................... | 799 "......................................... |
762 " ftp + <.netrc>: NetWrite Method #2 | 800 " ftp + <.netrc>: NetWrite Method #2 |
763 elseif b:netrw_method == 2 " write with ftp + <.netrc> | 801 elseif b:netrw_method == 2 " write with ftp + <.netrc> |
764 let netrw_fname = b:netrw_fname | 802 let netrw_fname = b:netrw_fname |
765 new | 803 new |
766 set ff=unix | 804 setlocal ff=unix |
767 exe "put ='".g:netrw_ftpmode."'" | 805 exe "put ='".g:netrw_ftpmode."'" |
768 " call Decho(" NetWrite: put ='".g:netrw_ftpmode."'") | 806 " call Decho(" NetWrite: put ='".g:netrw_ftpmode."'") |
769 exe "put ='put ".tmpfile." ".netrw_fname."'" | 807 exe "put ='put ".tmpfile." ".netrw_fname."'" |
770 " call Decho("put ='put ".tmpfile." ".netrw_fname."'") | 808 " call Decho("put ='put ".tmpfile." ".netrw_fname."'") |
771 if exists("g:netrw_port") && g:netrw_port != "" | 809 if exists("g:netrw_port") && g:netrw_port != "" |
786 "......................................... | 824 "......................................... |
787 " ftp + machine, id, passwd, filename: NetWrite Method #3 | 825 " ftp + machine, id, passwd, filename: NetWrite Method #3 |
788 elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname | 826 elseif b:netrw_method == 3 " write with ftp + machine, id, passwd, and fname |
789 let netrw_fname= b:netrw_fname | 827 let netrw_fname= b:netrw_fname |
790 new | 828 new |
791 set ff=unix | 829 setlocal ff=unix |
792 if exists("g:netrw_port") && g:netrw_port != "" | 830 if exists("g:netrw_port") && g:netrw_port != "" |
793 put ='open '.g:netrw_machine.' '.g:netrw_port | 831 put ='open '.g:netrw_machine.' '.g:netrw_port |
794 else | 832 else |
795 put ='open '.g:netrw_machine | 833 put ='open '.g:netrw_machine |
796 endif | 834 endif |
848 " call Decho("write via cadaver (method #6)") | 886 " call Decho("write via cadaver (method #6)") |
849 | 887 |
850 " Construct execution string (four lines) which will be passed through filter | 888 " Construct execution string (four lines) which will be passed through filter |
851 let netrw_fname= b:netrw_fname | 889 let netrw_fname= b:netrw_fname |
852 new | 890 new |
853 set ff=unix | 891 setlocal ff=unix |
854 if exists("g:netrw_port") && g:netrw_port != "" | 892 if exists("g:netrw_port") && g:netrw_port != "" |
855 put ='open '.g:netrw_machine.' '.g:netrw_port | 893 put ='open '.g:netrw_machine.' '.g:netrw_port |
856 else | 894 else |
857 put ='open '.g:netrw_machine | 895 put ='open '.g:netrw_machine |
858 endif | 896 endif |
893 let uid_machine = g:netrw_uid .'@'. g:netrw_machine | 931 let uid_machine = g:netrw_uid .'@'. g:netrw_machine |
894 else | 932 else |
895 let uid_machine = g:netrw_machine | 933 let uid_machine = g:netrw_machine |
896 endif | 934 endif |
897 new | 935 new |
898 set ff=unix | 936 setlocal ff=unix |
899 put ='put '.tmpfile.' '.netrw_fname | 937 put ='put '.tmpfile.' '.netrw_fname |
900 norm 1Gdd | 938 norm 1Gdd |
901 " call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine) | 939 " call Decho("executing: %!".g:netrw_sftp_cmd.' '.uid_machine) |
902 exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine | 940 exe g:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.uid_machine |
903 bd! | 941 bd! |
957 " call Decho("set up user <".user .">") | 995 " call Decho("set up user <".user .">") |
958 " call Decho("set up machine<".machine.">") | 996 " call Decho("set up machine<".machine.">") |
959 " call Decho("set up path <".path .">") | 997 " call Decho("set up path <".path .">") |
960 " call Decho("set up fname <".fname .">") | 998 " call Decho("set up fname <".fname .">") |
961 | 999 |
962 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'') | 1000 let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'') |
963 | 1001 |
964 " optionally sort by time (-t) or by size (-S) | 1002 " optionally sort by time (-t) or by size (-S) |
965 if g:netrw_sort_by =~ "^t" | 1003 if g:netrw_sort_by =~ "^t" |
966 let listcmd= listcmd."t" | 1004 let listcmd= listcmd."t" |
967 elseif g:netrw_sort_by =~ "^s" | 1005 elseif g:netrw_sort_by =~ "^s" |
968 let listcmd= listcmd."S" | 1006 let listcmd= listcmd."S" |
969 endif | 1007 endif |
970 " optionally sort in reverse | 1008 " optionally sort in reverse |
971 if g:netrw_sort_direction =~ "^r" | 1009 if g:netrw_sort_direction =~ "^r" |
972 let listcmd= listcmd."r" | 1010 let listcmd= listcmd."r" |
973 endif | 1011 endif |
974 | 1012 |
975 " call Decho("set up listcmd<".listcmd.">") | 1013 " call Decho("set up listcmd<".listcmd.">") |
976 | 1014 |
977 if fname =~ '@$' && fname !~ '^"' | 1015 if fname =~ '@$' && fname !~ '^"' |
978 " call Decho("attempt transfer of symlink as file") | 1016 " call Decho("attempt transfer of symlink as file") |
991 let path= substitute(path,'[*=@|]$','','e') | 1029 let path= substitute(path,'[*=@|]$','','e') |
992 " call Decho("new path<".path.">") | 1030 " call Decho("new path<".path.">") |
993 | 1031 |
994 " remote-read the requested file into current buffer | 1032 " remote-read the requested file into current buffer |
995 enew! | 1033 enew! |
996 exe "file ".method."://".user.machine."/".path | 1034 exe "file ".method."://".user.machine."/".escape(path,' ') |
997 exe "silent doau BufReadPre ".fname | 1035 exe "silent doau BufReadPre ".fname |
998 silent call s:NetRead(method."://".user.machine."/".path) | 1036 silent call s:NetRead(method."://".user.machine."/".path) |
999 exe "silent doau BufReadPost ".fname | 1037 exe "silent doau BufReadPost ".fname |
1000 1d | 1038 keepjumps 1d |
1001 set nomod | 1039 setlocal nomod |
1002 | 1040 |
1003 " call Dret("NetBrowse 0 : file<".fname.">") | 1041 " call Dret("NetBrowse 0 : file<".fname.">") |
1004 return 0 | 1042 return 0 |
1005 endif | 1043 endif |
1006 | 1044 |
1019 return 1 | 1057 return 1 |
1020 endif | 1058 endif |
1021 else | 1059 else |
1022 enew! | 1060 enew! |
1023 endif | 1061 endif |
1024 setlocal bt=nofile bh=wipe nobl | 1062 setlocal ts=32 bt=nofile bh=wipe nobl |
1025 exe 'file '.bufname | 1063 exe 'file '.escape(bufname,' ') |
1026 set bt=nowrite bh=hide nobl | 1064 setlocal bt=nowrite bh=hide nobl |
1027 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> | 1065 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr> |
1028 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> | 1066 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> |
1029 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr> | 1067 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'../'))<cr> |
1030 nnoremap <buffer> <silent> a :let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> | 1068 nnoremap <buffer> <silent> a :let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> |
1031 nnoremap <buffer> <silent> h :call <SID>NetHideEdit()<cr> | 1069 nnoremap <buffer> <silent> <Leader>H :call <SID>NetHideEdit(0)<cr> |
1032 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> | 1070 nnoremap <buffer> <silent> i :call <SID>NetLongList(0)<cr> |
1033 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> | 1071 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr> |
1072 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr> | |
1034 nnoremap <buffer> <silent> s :let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> | 1073 nnoremap <buffer> <silent> s :let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./'))<cr> |
1035 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> | 1074 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr> |
1036 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> | 1075 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()),1)<cr> |
1037 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),expand("<cWORD>")))<cr> | 1076 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),<SID>NetGetDir()))<cr> |
1038 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' | 1077 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' |
1039 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' | 1078 exe 'vnoremap <buffer> <silent> <del> :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' |
1040 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' | 1079 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' |
1041 exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' | 1080 exe 'vnoremap <buffer> <silent> D :call <SID>NetBrowseRm("'.user.machine.'","'.path.'")<cr>' |
1042 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>' | 1081 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>NetBrowseRename("'.user.machine.'","'.path.'")<cr>' |
1043 nnoremap <buffer> ? :he netrw-dir<cr> | 1082 exe 'nnoremap <buffer> <silent> <Leader>M :call <SID>NetMakeDir("'.user.machine.'")<cr>' |
1083 nnoremap <buffer> ? :he netrw-browse-cmds<cr> | |
1044 setlocal ma | 1084 setlocal ma |
1045 | 1085 |
1046 " Set up the banner | 1086 " Set up the banner |
1047 " call Decho("executing: r! ".listcmd." '".path."'") | 1087 " call Decho("executing: r! ".listcmd." '".path."'") |
1048 keepjumps put ='\" ==============================' | 1088 keepjumps put ='\" ==============================' |
1067 " remote read the requested directory | 1107 " remote read the requested directory |
1068 exe "silent r! ".listcmd." '".path."'" | 1108 exe "silent r! ".listcmd." '".path."'" |
1069 keepjumps 1d | 1109 keepjumps 1d |
1070 | 1110 |
1071 " manipulate the directory listing (hide, sort) | 1111 " manipulate the directory listing (hide, sort) |
1072 set ft=netrwlist | 1112 setlocal ft=netrwlist |
1073 if line("$") >= g:netrw_bannercnt | 1113 if line("$") >= g:netrw_bannercnt |
1074 if !exists("g:netrw_list_showall") | 1114 if !exists("g:netrw_list_showall") |
1075 if g:netrw_list_hide != "" | 1115 if g:netrw_list_hide != "" |
1076 call s:NetrwListHide() | 1116 call s:NetrwListHide() |
1077 endif | 1117 endif |
1078 else | 1118 else |
1079 unlet g:netrw_list_showall | 1119 unlet g:netrw_list_showall |
1080 endif | 1120 endif |
1121 if g:netrw_longlist | |
1122 " do a long listing; these substitutions need to be done prior to sorting | |
1123 keepjumps silent /^total\s*\d\+$/d | |
1124 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/ -> .*$//e' | |
1125 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/\(\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\s\+\S\+\)\s\+\(\S\+\)$/\2\t\1/e' | |
1126 exe g:netrw_bannercnt | |
1127 endif | |
1081 if g:netrw_sort_by =~ "^n" | 1128 if g:netrw_sort_by =~ "^n" |
1082 call s:SetSort() | 1129 call s:SetSort() |
1083 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()' | 1130 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()' |
1084 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e' | 1131 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e' |
1085 endif | 1132 endif |
1109 " call Decho("handling a file: dirname<".dirname.">") | 1156 " call Decho("handling a file: dirname<".dirname.">") |
1110 | 1157 |
1111 elseif newdir == './' | 1158 elseif newdir == './' |
1112 " refresh the directory list | 1159 " refresh the directory list |
1113 " call Decho("refresh directory listing") | 1160 " call Decho("refresh directory listing") |
1114 set ma | 1161 setlocal ma |
1115 %d | 1162 %d |
1116 | 1163 |
1117 elseif newdir == '../' | 1164 elseif newdir == '../' |
1118 " go up one directory | 1165 " go up one directory |
1119 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','') | 1166 let trailer= substitute(a:dirname,'^\(\w\+://\%(\w\+@\)\=\w\+/\)\(.*\)$','\2','') |
1133 let dirname= dirname.newdir | 1180 let dirname= dirname.newdir |
1134 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") | 1181 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") |
1135 endif | 1182 endif |
1136 | 1183 |
1137 " call Dret("NetBrowseChgDir <".dirname.">") | 1184 " call Dret("NetBrowseChgDir <".dirname.">") |
1185 return dirname | |
1186 endfun | |
1187 | |
1188 " --------------------------------------------------------------------- | |
1189 " NetGetDir: it gets the directory named under the cursor | |
1190 fun! <SID>NetGetDir() | |
1191 " call Dfunc("NetGetDir()") | |
1192 let dirname= getline(".") | |
1193 if dirname =~ '\t' | |
1194 let dirname= substitute(dirname,'\t.*$','','e') | |
1195 endif | |
1196 " call Dret("NetGetDir <".dirname.">") | |
1138 return dirname | 1197 return dirname |
1139 endfun | 1198 endfun |
1140 | 1199 |
1141 " --------------------------------------------------------------------- | 1200 " --------------------------------------------------------------------- |
1142 " NetBrowseRm: remove a remote file or directory {{{2 | 1201 " NetBrowseRm: remove a remote file or directory {{{2 |
1213 let ctr = a:firstline | 1272 let ctr = a:firstline |
1214 let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'') | 1273 let rename_cmd = substitute(g:netrw_rename_cmd,'\<HOSTNAME\>',a:usrhost,'') |
1215 | 1274 |
1216 " attempt to rename files/directories | 1275 " attempt to rename files/directories |
1217 while ctr <= a:lastline | 1276 while ctr <= a:lastline |
1218 exe ctr | 1277 exe "keepjumps ".ctr |
1219 | 1278 |
1220 norm! 0 | 1279 norm! 0 |
1221 let oldname= a:path.expand("<cWORD>") | 1280 let oldname= a:path.expand("<cWORD>") |
1222 " call Decho("oldname<".oldname.">") | 1281 " call Decho("oldname<".oldname.">") |
1223 | 1282 |
1232 endwhile | 1291 endwhile |
1233 | 1292 |
1234 " refresh the directory | 1293 " refresh the directory |
1235 let curline= line(".") | 1294 let curline= line(".") |
1236 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./')) | 1295 call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),'./')) |
1237 exe curline | 1296 exe "keepjumps ".curline |
1238 " call Dret("NetBrowseRename") | 1297 " call Dret("NetBrowseRename") |
1239 endfun | 1298 endfun |
1240 | 1299 |
1241 " --------------------------------------------------------------------- | 1300 " --------------------------------------------------------------------- |
1242 " NetBrowseX: allows users to write custom functions to operate on {{{2 | 1301 " NetBrowseX: allows users to write custom functions to operate on {{{2 |
1243 " files given their extension | 1302 " files given their extension. Passes 0=local, 1=remote |
1244 fun! <SID>NetBrowseX(fname) | 1303 fun! <SID>NetBrowseX(fname,remote) |
1245 " call Dfunc("NetBrowseX(".a:fname.")") | 1304 " call Dfunc("NetBrowseX(".a:fname." remote=".a:remote.")") |
1246 | 1305 |
1247 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') | 1306 let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e') |
1248 " call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten)) | 1307 " call Decho("exten<".exten."> "."NetrwFileHandler_".exten."():exists=".exists("*NetrwFileHandler_".exten)) |
1249 if exten != "" && exists("*NetrwFileHandler_".exten) | 1308 if exten != "" && exists("*NetrwFileHandler_".exten) |
1250 exe "call NetrwFileHandler_".exten.'("'.a:fname.'")' | 1309 |
1251 endif | 1310 let fname= a:fname |
1311 if a:remote == 1 | |
1312 " create a local copy | |
1313 let fname= tempname().".".exten | |
1314 " call Decho("create a local copy of <".a:fname."> as <".fname.">") | |
1315 exe "keepjumps silent bot 1new ".a:fname | |
1316 let eikeep= &ei | |
1317 set ei=all bh=delete | |
1318 exe "w! ".fname | |
1319 let &ei= eikeep | |
1320 q | |
1321 endif | |
1322 | |
1323 exe "let ret= NetrwFileHandler_".exten.'("'.fname.'")' | |
1324 redraw! | |
1325 | |
1326 " cleanup: remove temporary file, | |
1327 " delete current buffer if success with handler, | |
1328 " return to prior buffer (directory listing) | |
1329 if a:remote == 1 && fname != a:fname | |
1330 " call Decho("deleting temporary file<".fname.">") | |
1331 call delete(fname) | |
1332 endif | |
1333 if ret != 0 | |
1334 let eikeep= &ei | |
1335 set ei=all bh=delete bt=nofile | |
1336 exe "norm! \<c-o>" | |
1337 let &ei= eikeep | |
1338 redraw! | |
1339 endif | |
1340 endif | |
1341 | |
1252 " call Dret("NetBrowseX") | 1342 " call Dret("NetBrowseX") |
1253 endfun | 1343 endfun |
1254 | 1344 |
1255 " --------------------------------------------------------------------- | 1345 " --------------------------------------------------------------------- |
1256 " NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2 | 1346 " NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2 |
1274 " call Dret("NetrwListHide") | 1364 " call Dret("NetrwListHide") |
1275 endfun | 1365 endfun |
1276 | 1366 |
1277 " --------------------------------------------------------------------- | 1367 " --------------------------------------------------------------------- |
1278 " NetHideEdit: allows user to edit the file/directory hiding list | 1368 " NetHideEdit: allows user to edit the file/directory hiding list |
1279 fun! <SID>NetHideEdit() | 1369 fun! <SID>NetHideEdit(mode) |
1280 " call Dfunc("NetHideEdit()") | 1370 " call Dfunc("NetHideEdit(mode=".a:mode.")") |
1281 | 1371 |
1282 call inputsave() | 1372 call inputsave() |
1283 let newhide= input("Edit Hiding List: ",g:netrw_list_hide) | 1373 let newhide= input("Edit Hiding List: ",g:netrw_list_hide) |
1284 call inputrestore() | 1374 call inputrestore() |
1285 | 1375 |
1286 " refresh the listing | 1376 " refresh the listing |
1287 let g:netrw_list_hide= newhide | 1377 let g:netrw_list_hide= newhide |
1288 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./')) | 1378 if a:mode == 0 |
1379 silent call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./')) | |
1380 else | |
1381 silent call s:LocalBrowse(s:NetBrowseChgDir(expand("%"),'./')) | |
1382 endif | |
1289 | 1383 |
1290 " call Dret("NetHideEdit") | 1384 " call Dret("NetHideEdit") |
1291 endfun | 1385 endfun |
1292 | 1386 |
1293 " ------------------------------------------------------------------------ | 1387 " --------------------------------------------------------------------- |
1388 " NetLongList: {{{2 | |
1389 fun! <SID>NetLongList(mode) | |
1390 " call Dfunc("NetLongList(mode=".a:mode.") netrw_longlist=".g:netrw_longlist) | |
1391 | |
1392 if g:netrw_longlist != 0 | |
1393 " turn long listing off | |
1394 let g:netrw_longlist = 0 | |
1395 let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge') | |
1396 | |
1397 else | |
1398 " turn long listing on | |
1399 let g:netrw_longlist = 1 | |
1400 let g:netrw_list_cmd = g:netrw_list_cmd." -l" | |
1401 endif | |
1402 | |
1403 " refresh the listing | |
1404 if a:mode == 0 | |
1405 silent call <SID>NetBrowse(<SID>NetBrowseChgDir(expand("%"),"./")) | |
1406 else | |
1407 silent call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%"),"./")) | |
1408 endif | |
1409 | |
1410 " call Dret("NetLongList : g:netrw_longlist=".g:netrw_longlist) | |
1411 endfun | |
1412 | |
1413 " --------------------------------------------------------------------- | |
1414 " NetMakeDir: this function makes a directory (both local and remote) | |
1415 fun! <SID>NetMakeDir(usrhost) | |
1416 " call Dfunc("NetMakeDir(usrhost<".a:usrhost.">)") | |
1417 | |
1418 " get name of new directory from user. A bare <CR> will skip. | |
1419 " if its currently a directory, also request will be skipped, but with | |
1420 " a message. | |
1421 call inputsave() | |
1422 let newdirname= input("Please give directory name: ") | |
1423 call inputrestore() | |
1424 | |
1425 if newdirname == "" | |
1426 " call Dret("NetMakeDir : user aborted with bare <cr>") | |
1427 return | |
1428 endif | |
1429 | |
1430 if a:usrhost == "" | |
1431 | |
1432 " Local mkdir: | |
1433 " sanity checks | |
1434 if isdirectory(newdirname) | |
1435 echoerr "***warning*** <".newdirname."> is already a directory!" | |
1436 " call Dret("NetMakeDir : directory<".newdirname."> exists previously") | |
1437 return | |
1438 endif | |
1439 if filereadable(newdirname) | |
1440 echoerr "***warning*** <".newdirname."> is already a file!" | |
1441 " call Dret("NetMakeDir : file<".newdirname."> exists previously") | |
1442 return | |
1443 endif | |
1444 exe "silent! !".g:netrw_local_mkdir." ".newdirname | |
1445 if v:shell_error == 0 | |
1446 " refresh listing | |
1447 call s:LocalBrowse(".") | |
1448 else | |
1449 echoerr "***warning*** unable to make directory<".newdirname.">" | |
1450 endif | |
1451 redraw! | |
1452 | |
1453 else | |
1454 " Remote mkdir: | |
1455 let mkdircmd = substitute(g:netrw_mkdir_cmd,'\<HOSTNAME\>',a:usrhost,'') | |
1456 let newdirname= substitute(expand("%"),'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname | |
1457 " call Decho("exe silent! !".mkdircmd." ".newdirname) | |
1458 exe "silent! !".mkdircmd." ".newdirname | |
1459 if v:shell_error == 0 | |
1460 " refresh listing | |
1461 call s:NetBrowse(s:NetBrowseChgDir(expand("%"),'./')) | |
1462 else | |
1463 echoerr "***warning*** unable to make directory<".newdirname.">" | |
1464 endif | |
1465 redraw! | |
1466 endif | |
1467 | |
1468 " call Dret("NetMakeDir") | |
1469 endfun | |
1470 | |
1471 " --------------------------------------------------------------------- | |
1472 " Browsing Support For Local Directories And Files: {{{1 | |
1473 | |
1474 " --------------------------------------------------------------------- | |
1475 " LocalBrowse: supports local file/directory browsing {{{2 | |
1476 fun! <SID>LocalBrowse(dirname) | |
1477 | |
1478 " let dirname= (a:dirname == "")? expand("%:p") : a:dirname | |
1479 if !isdirectory(a:dirname) | |
1480 " not a directory, ignore it | |
1481 return | |
1482 endif | |
1483 | |
1484 " " unfortunate interaction -- when putting Dfunc/Dret above | |
1485 " one can no longer enter the DBG buffer. | |
1486 " call Dfunc("LocalBrowse(dirname<".a:dirname.">)") | |
1487 | |
1488 exe 'cd '.escape(a:dirname,' ') | |
1489 let dirname= getcwd()."/" | |
1490 " call Decho("dirname<".dirname.">") | |
1491 | |
1492 " make this buffer modifiable | |
1493 setlocal ma | |
1494 | |
1495 " --------------------------------------------------------------------- | |
1496 " Perform Directory Listing: | |
1497 " call Decho("Perform directory listing...") | |
1498 " set up new buffer and map | |
1499 let dirnamenr = bufnr(dirname) | |
1500 if dirnamenr != -1 && bufname(dirnamenr) != dirname | |
1501 " try removing the trailing "/" | |
1502 let dirnamenr= bufnr(substitute(dirname,'/$','','e')) | |
1503 endif | |
1504 " call Decho("bufnr(dirname<".dirname.">)=".dirnamenr) | |
1505 | |
1506 if dirnamenr != -1 && bufexists(dirname) | |
1507 " buffer already exists (hidden), so switch to it! | |
1508 exe "b ".dirnamenr | |
1509 exe 'cd '.escape(dirname,' ') | |
1510 " call Decho("changed directory to<".dirname.">") | |
1511 if a:dirname != "." && line("$") >= 5 | |
1512 " call Dret("LocalBrowse : buffer already exists with info") | |
1513 return | |
1514 endif | |
1515 " call Decho("buffer already exists, but needs listing (buf#".dirnamenr.")") | |
1516 keepjumps %d | |
1517 else | |
1518 " call Dredir("ls!") | |
1519 " call Decho("generate new buffer named<".dirname.">") | |
1520 silent! enew! | |
1521 exe 'silent! file '.escape(dirname,' ') | |
1522 endif | |
1523 " set standard browser options on buffer | |
1524 setlocal ts=32 bt=nowrite bh=hide nobl | |
1525 | |
1526 " set up all the maps | |
1527 nnoremap <buffer> <silent> <cr> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr> | |
1528 nnoremap <buffer> <silent> <c-l> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'./'))<cr> | |
1529 nnoremap <buffer> <silent> - :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'../'))<cr> | |
1530 nnoremap <buffer> <silent> a :let g:netrw_list_showall=1<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'./'))<cr> | |
1531 nnoremap <buffer> <silent> <Leader>H :call <SID>NetHideEdit(1)<cr> | |
1532 nnoremap <buffer> <silent> <Leader>M :call <SID>NetMakeDir("")<cr> | |
1533 nnoremap <buffer> <silent> i :call <SID>NetLongList(1)<cr> | |
1534 nnoremap <buffer> <silent> o :exe g:netrw_winsize."wincmd s"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr> | |
1535 nnoremap <buffer> <silent> r :let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr> | |
1536 nnoremap <buffer> <silent> s :let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),'./'))<cr> | |
1537 nnoremap <buffer> <silent> v :exe g:netrw_winsize."wincmd v"<bar>exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr> | |
1538 nnoremap <buffer> <silent> x :exe "norm! 0"<bar>call <SID>NetBrowseX(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()),0)<cr> | |
1539 nnoremap <buffer> <silent> <2-leftmouse> :exe "norm! 0"<bar>call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%:p"),<SID>NetGetDir()))<cr> | |
1540 exe 'nnoremap <buffer> <silent> <del> :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>' | |
1541 exe 'vnoremap <buffer> <silent> <del> :call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>' | |
1542 exe 'nnoremap <buffer> <silent> D :exe "norm! 0"<bar>call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>' | |
1543 exe 'vnoremap <buffer> <silent> D :call <SID>LocalBrowseRm("'.expand("%:p").<SID>NetGetDir().'")<cr>' | |
1544 exe 'nnoremap <buffer> <silent> R :exe "norm! 0"<bar>call <SID>LocalBrowseRename("'.expand("%:p").<SID>NetGetDir().'")<cr>' | |
1545 nnoremap <buffer> ? :he netrw-dir<cr> | |
1546 | |
1547 " Set up the banner | |
1548 keepjumps put ='\" =================' | |
1549 keepjumps 1d | |
1550 keepjumps put ='\" Directory Listing' | |
1551 keepjumps put ='\" '.dirname | |
1552 let g:netrw_bannercnt= 6 | |
1553 if g:netrw_sort_by =~ "^n" | |
1554 " sorted by name | |
1555 let g:netrw_bannercnt= g:netrw_bannercnt + 1 | |
1556 keepjumps put ='\" Sorted by '.g:netrw_sort_by | |
1557 keepjumps put ='\" Sort sequence: '.g:netrw_sort_sequence | |
1558 else | |
1559 " sorted by size or date | |
1560 keepjumps put ='\" Sorted by '.g:netrw_sort_by | |
1561 endif | |
1562 if g:netrw_list_hide != "" && !exists("g:netrw_list_showall") | |
1563 keepjumps put ='\" Hiding: '.g:netrw_list_hide | |
1564 let g:netrw_bannercnt= g:netrw_bannercnt + 1 | |
1565 endif | |
1566 keepjumps put ='\" =================' | |
1567 | |
1568 " generate the requested directory listing | |
1569 call LocalBrowseList(dirname) | |
1570 | |
1571 " manipulate the directory listing (hide, sort) | |
1572 setlocal ft=netrwlist | |
1573 if line("$") >= g:netrw_bannercnt | |
1574 if !exists("g:netrw_list_showall") | |
1575 if g:netrw_list_hide != "" | |
1576 call s:NetrwListHide() | |
1577 endif | |
1578 else | |
1579 unlet g:netrw_list_showall | |
1580 endif | |
1581 if g:netrw_sort_by =~ "^n" | |
1582 call s:SetSort() | |
1583 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()' | |
1584 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{3}\///e' | |
1585 else | |
1586 exe 'keepjumps silent '.g:netrw_bannercnt.',$call s:NetSort()' | |
1587 exe 'keepjumps silent '.g:netrw_bannercnt.',$s/^\d\{-}\///e' | |
1588 endif | |
1589 endif | |
1590 exe g:netrw_bannercnt | |
1591 try | |
1592 exe 'cd '.escape(substitute(dirname,'/$','','e'),' ') | |
1593 " call Decho("changed directory to<".dirname.">") | |
1594 catch | |
1595 echoerr "Not a directory: <".dirname.">" | |
1596 endtry | |
1597 | |
1598 setlocal noma nomod | |
1599 | |
1600 " call Dret("LocalBrowse") | |
1601 endfun | |
1602 | |
1603 " --------------------------------------------------------------------- | |
1604 " LocalBrowseList: does the job of "ls" for local directories {{{2 | |
1605 fun! LocalBrowseList(dirname) | |
1606 " call Dfunc("LocalBrowseList(dirname<".a:dirname.">)") | |
1607 | |
1608 let dirnamelen = strlen(a:dirname) | |
1609 let filelist = glob(a:dirname."*")."\n".glob(a:dirname.".*") | |
1610 " call Decho("filelist<".filelist.">") | |
1611 | |
1612 while filelist != "" | |
1613 if filelist =~ '\n' | |
1614 let file = substitute(filelist,'\n.*$','','e') | |
1615 let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e') | |
1616 else | |
1617 let file = filelist | |
1618 let filelist= "" | |
1619 endif | |
1620 let pfile= file | |
1621 if isdirectory(file) | |
1622 let pfile= file."/" | |
1623 endif | |
1624 let pfile= strpart(pfile,dirnamelen) | |
1625 if g:netrw_longlist | |
1626 let pfile= pfile."\t".getfsize(file)."\t".strftime(g:netrw_timefmt,getftime(file)) | |
1627 endif | |
1628 if g:netrw_sort_by =~ "^t" | |
1629 " sort by time (handles time up to 1 quintillion seconds, US) | |
1630 " call Decho("getftime(".file.")=".getftime(file)) | |
1631 let t = getftime(file) | |
1632 let ft = strpart("000000000000000000",1,18-strlen(t)).t | |
1633 " call Decho("exe keepjumps put ='".ft.'/'.file."'") | |
1634 exe "keepjumps put ='".ft.'/'.pfile."'" | |
1635 elseif g:netrw_sort_by =~ "^s" | |
1636 " sort by size (handles file sizes up to 1 quintillion bytes, US) | |
1637 " call Decho("getfsize(".file.")=".getfsize(file)) | |
1638 let sz = getfsize(file) | |
1639 let fsz = strpart("000000000000000000",1,18-strlen(sz)).sz | |
1640 " call Decho("exe keepjumps put ='".fsz.'/'.file."'") | |
1641 exe "keepjumps put ='".fsz.'/'.pfile."'" | |
1642 else | |
1643 " sort by name | |
1644 " call Decho("exe keepjumps put ='".file."'") | |
1645 exe "keepjumps put ='".pfile."'" | |
1646 endif | |
1647 endwhile | |
1648 | |
1649 " call Dret("LocalBrowseList") | |
1650 endfun | |
1651 | |
1652 " --------------------------------------------------------------------- | |
1653 " LocalBrowseChgDir: constructs a new directory based on the current {{{2 | |
1654 " directory and a new directory name | |
1655 fun! <SID>LocalBrowseChgDir(dirname,newdir) | |
1656 " call Dfunc("LocalBrowseChgDir(dirname<".a:dirname."> newdir<".a:newdir.">)") | |
1657 | |
1658 let dirname= a:dirname | |
1659 let newdir = a:newdir | |
1660 | |
1661 if dirname !~ '/$' | |
1662 " apparently vim is "recognizing" that it is in the home directory and | |
1663 " is removing the "/". Bad idea, so I have to put it back. | |
1664 let dirname= dirname.'/' | |
1665 " call Decho("adjusting dirname<".dirname.">") | |
1666 endif | |
1667 | |
1668 if newdir !~ '/$' | |
1669 " handling a file | |
1670 let dirname= dirname.newdir | |
1671 " call Decho("handling a file: dirname<".dirname.">") | |
1672 exe "e ".dirname | |
1673 | |
1674 elseif newdir == './' | |
1675 " refresh the directory list | |
1676 " call Decho("refresh directory listing") | |
1677 setlocal ma | |
1678 %d | |
1679 | |
1680 elseif newdir == '../' | |
1681 " go up one directory | |
1682 let dirname= substitute(dirname,'^\(.*/\)\([^/]\+/$\)','\1','e') | |
1683 " call Decho("go up one dir: dirname<".dirname.">") | |
1684 | |
1685 else | |
1686 " go down one directory | |
1687 let dirname= dirname.newdir | |
1688 " call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">") | |
1689 endif | |
1690 | |
1691 " call Dret("LocalBrowseChgDir <".dirname.">") | |
1692 return dirname | |
1693 endfun | |
1694 | |
1695 " --------------------------------------------------------------------- | |
1696 " LocalBrowseRm: | |
1697 fun! <SID>LocalBrowseRm(path) range | |
1698 " call Dfunc("LocalBrowseRm(path<".a:path.">)") | |
1699 " call Decho("firstline=".a:firstline." lastline=".a:lastline) | |
1700 | |
1701 " preparation for removing multiple files/directories | |
1702 let ctr= a:firstline | |
1703 | |
1704 " remove multiple files and directories | |
1705 while ctr <= a:lastline | |
1706 exe ctr | |
1707 | |
1708 norm! 0 | |
1709 let rmfile= a:path.expand("<cWORD>") | |
1710 " call Decho("rmfile<".rmfile.">") | |
1711 | |
1712 if rmfile !~ '^"' && (rmfile =~ '@$' || rmfile !~ '/$') | |
1713 " attempt to remove file | |
1714 call inputsave() | |
1715 let ok= input("Confirm deletion of file<".rmfile."> ","y") | |
1716 call inputrestore() | |
1717 if ok == "y" | |
1718 call delete(rmfile) | |
1719 " call Decho("errcode=".v:shell_error) | |
1720 endif | |
1721 | |
1722 else | |
1723 " attempt to remove directory | |
1724 call inputsave() | |
1725 let ok= input("Confirm deletion of directory<".rmfile."> ","y") | |
1726 call inputrestore() | |
1727 let rmfile= substitute(rmfile,'/$','','e') | |
1728 | |
1729 if ok == "y" | |
1730 call system(g:netrw_local_rmdir." ".rmfile) | |
1731 " call Decho("v:shell_error=".v:shell_error) | |
1732 | |
1733 if v:shell_error != 0 | |
1734 " call Decho("2nd attempt to remove directory<".rmfile.">") | |
1735 let errcode= delete(rmfile) | |
1736 " call Decho("errcode=".errcode) | |
1737 | |
1738 if errcode != 0 | |
1739 if has("unix") | |
1740 " call Decho("3rd attempt to remove directory<".rmfile.">") | |
1741 call system("rm ".rmfile) | |
1742 if v:shell_error != 0 | |
1743 echoerr "unable to remove directory<".rmfile."> -- is it empty?" | |
1744 endif | |
1745 else | |
1746 echoerr "unable to remove directory<".rmfile."> -- is it empty?" | |
1747 endif | |
1748 endif | |
1749 endif | |
1750 endif | |
1751 endif | |
1752 | |
1753 let ctr= ctr + 1 | |
1754 endwhile | |
1755 | |
1756 " refresh the directory | |
1757 let curline= line(".")-1 | |
1758 " call Decho("refresh the directory") | |
1759 call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%"),'./')) | |
1760 exe curline | |
1761 | |
1762 " call Dret("LocalBrowseRm") | |
1763 endfun | |
1764 | |
1765 " --------------------------------------------------------------------- | |
1766 " LocalBrowseRename: rename a remote file or directory {{{2 | |
1767 fun! <SID>LocalBrowseRename(path) | |
1768 " call Dfunc("LocalBrowseRename(path<".a:path.">)") | |
1769 | |
1770 " preparation for removing multiple files/directories | |
1771 let ctr= a:firstline | |
1772 | |
1773 " attempt to rename files/directories | |
1774 while ctr <= a:lastline | |
1775 exe "keepjumps ".ctr | |
1776 | |
1777 norm! 0 | |
1778 let oldname= a:path.expand("<cWORD>") | |
1779 " call Decho("oldname<".oldname.">") | |
1780 | |
1781 call inputsave() | |
1782 let newname= input("Moving ".oldname." to : ",oldname) | |
1783 call inputrestore() | |
1784 | |
1785 let ret= system(g:netrw_local_rename." ".oldname." ".newname) | |
1786 " call Decho("executing system(".g:netrw_local_rename." ".oldname." ".newname) | |
1787 | |
1788 let ctr= ctr + 1 | |
1789 endwhile | |
1790 | |
1791 " refresh the directory | |
1792 let curline= line(".") | |
1793 call <SID>LocalBrowse(<SID>LocalBrowseChgDir(expand("%"),'./')) | |
1794 exe "keepjumps ".curline | |
1795 " call Dret("LocalBrowseRename") | |
1796 endfun | |
1797 | |
1798 " --------------------------------------------------------------------- | |
1294 " NetMethod: determine method of transfer {{{1 | 1799 " NetMethod: determine method of transfer {{{1 |
1295 " method == 1: rcp | 1800 " method == 1: rcp |
1296 " 2: ftp + <.netrc> | 1801 " 2: ftp + <.netrc> |
1297 " 3: ftp + machine, id, password, and [path]filename | 1802 " 3: ftp + machine, id, password, and [path]filename |
1298 " 4: scp | 1803 " 4: scp |
1529 let s:comkeep = &com | 2034 let s:comkeep = &com |
1530 let s:cpokeep = &cpo | 2035 let s:cpokeep = &cpo |
1531 let s:dirkeep = getcwd() | 2036 let s:dirkeep = getcwd() |
1532 let s:gdkeep = &gd | 2037 let s:gdkeep = &gd |
1533 let s:twkeep = &tw | 2038 let s:twkeep = &tw |
1534 set cino = | 2039 setlocal cino = |
1535 set com = | 2040 setlocal com = |
1536 set cpo -=aA | 2041 setlocal cpo -=aA |
1537 set nocin noai | 2042 setlocal nocin noai |
1538 set tw =0 | 2043 setlocal tw =0 |
1539 if has("win32") && !has("win95") | 2044 if has("win32") && !has("win95") |
1540 let s:swfkeep= &swf | 2045 let s:swfkeep= &swf |
1541 set noswf | 2046 setlocal noswf |
1542 " call Decho("setting s:swfkeep to <".&swf.">") | 2047 " call Decho("setting s:swfkeep to <".&swf.">") |
1543 endif | 2048 endif |
1544 | 2049 |
1545 " call Dret("NetOptionSave") | 2050 " call Dret("NetOptionSave") |
1546 endfun | 2051 endfun |
1593 endif | 2098 endif |
1594 | 2099 |
1595 " --------------------------------------------------------------------- | 2100 " --------------------------------------------------------------------- |
1596 " NetSort: Piet Delport's BISort2() function, modified to take a range {{{1 | 2101 " NetSort: Piet Delport's BISort2() function, modified to take a range {{{1 |
1597 fun! <SID>NetSort() range | 2102 fun! <SID>NetSort() range |
2103 " call Dfunc("NetSort()") | |
2104 | |
1598 let i = a:firstline + 1 | 2105 let i = a:firstline + 1 |
1599 while i <= a:lastline | 2106 while i <= a:lastline |
1600 " find insertion point via binary search | 2107 " find insertion point via binary search |
1601 let i_val = getline(i) | 2108 let i_val = getline(i) |
1602 let lo = a:firstline | 2109 let lo = a:firstline |
1627 exe 'keepjumps '.i.'d_' | 2134 exe 'keepjumps '.i.'d_' |
1628 keepjumps call append(lo - 1, i_val) | 2135 keepjumps call append(lo - 1, i_val) |
1629 endif | 2136 endif |
1630 let i = i + 1 | 2137 let i = i + 1 |
1631 endwhile | 2138 endwhile |
2139 | |
2140 " call Dret("NetSort") | |
1632 endfun | 2141 endfun |
1633 | 2142 |
1634 " --------------------------------------------------------------------- | 2143 " --------------------------------------------------------------------- |
1635 " SetSort: sets up the sort based on the g:netrw_sort_sequence | 2144 " SetSort: sets up the sort based on the g:netrw_sort_sequence {{{1 |
2145 " What this function does is to compute a priority for the patterns | |
2146 " in the g:netrw_sort_sequence. It applies a substitute to any | |
2147 " "files" that satisfy each pattern, putting the priority / in | |
2148 " front. An "*" pattern handles the default priority. | |
1636 fun! <SID>SetSort() | 2149 fun! <SID>SetSort() |
1637 " call Dfunc("SetSort() bannercnt=".g:netrw_bannercnt) | 2150 " call Dfunc("SetSort() bannercnt=".g:netrw_bannercnt) |
1638 let seqlist = g:netrw_sort_sequence | 2151 if g:netrw_longlist |
2152 let seqlist = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge') | |
2153 else | |
2154 let seqlist = g:netrw_sort_sequence | |
2155 endif | |
2156 " sanity check -- insure that * appears somewhere | |
2157 if seqlist == "" | |
2158 let seqlist= '*' | |
2159 elseif seqlist !~ '\*' | |
2160 let seqlist= seqlist.',*' | |
2161 endif | |
1639 let priority = 1 | 2162 let priority = 1 |
1640 while seqlist != "" | 2163 while seqlist != "" |
1641 if seqlist =~ ',' | 2164 if seqlist =~ ',' |
1642 let seq = substitute(seqlist,',.*$','','e') | 2165 let seq = substitute(seqlist,',.*$','','e') |
1643 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e') | 2166 let seqlist = substitute(seqlist,'^.\{-},\(.*\)$','\1','e') |