Mercurial > vim
comparison runtime/autoload/vimball.vim @ 792:860b73800cd7
updated for version 7.0231
author | vimboss |
---|---|
date | Tue, 21 Mar 2006 21:20:39 +0000 |
parents | |
children | cc3902a09300 |
comparison
equal
deleted
inserted
replaced
791:98a88a884610 | 792:860b73800cd7 |
---|---|
1 " vimball : construct a file containing both paths and files | |
2 " Author: Charles E. Campbell, Jr. | |
3 " Date: Mar 20, 2006 | |
4 " Version: 4 | |
5 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim | |
6 " Copyright: (c) 2004-2006 by Charles E. Campbell, Jr. | |
7 " The VIM LICENSE applies to Vimball.vim, and Vimball.txt | |
8 " (see |copyright|) except use "Vimball" instead of "Vim". | |
9 " No warranty, express or implied. | |
10 " *** *** Use At-Your-Own-Risk! *** *** | |
11 | |
12 " --------------------------------------------------------------------- | |
13 " Load Once: {{{1 | |
14 if &cp || exists("g:loaded_vimball") | |
15 finish | |
16 endif | |
17 let s:keepcpo = &cpo | |
18 let g:loaded_vimball = "v4" | |
19 set cpo&vim | |
20 | |
21 " ===================================================================== | |
22 " Functions: {{{1 | |
23 | |
24 " --------------------------------------------------------------------- | |
25 " MkVimball: creates a vimball given a list of paths to files {{{2 | |
26 " Vimball Format: | |
27 " path | |
28 " filesize | |
29 " [file] | |
30 " path | |
31 " filesize | |
32 " [file] | |
33 fun! vimball#MkVimball(line1,line2,writelevel,vimballname) range | |
34 " call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:vimballname.">") | |
35 let vbname= substitute(a:vimballname,'\.[^.]*$','','e').'.vba' | |
36 if !a:writelevel && filereadable(vbname) | |
37 echohl Error | echoerr "(MkVimball) file<".vbname."> exists; use ! to insist" | echohl None | |
38 " call Dret("MkVimball : file<".vbname."> already exists; use ! to insist") | |
39 return | |
40 endif | |
41 | |
42 " user option bypass | |
43 let eikeep= &ei | |
44 set ei=all | |
45 | |
46 let home = substitute(&rtp,',.*$','','') | |
47 let curdir = getcwd() | |
48 exe "cd ".home | |
49 | |
50 " record current tab, initialize while loop index | |
51 let curtabnr = tabpagenr() | |
52 let linenr = a:line1 | |
53 " call Decho("curtabnr=".curtabnr) | |
54 | |
55 while linenr <= a:line2 | |
56 let svfile = getline(linenr) | |
57 " call Decho("svfile<".svfile.">") | |
58 | |
59 if !filereadable(svfile) | |
60 echohl Error | echo "unable to read file<".svfile.">" | echohl None | |
61 let &ei= eikeep | |
62 exe "cd ".curdir | |
63 " call Dret("MkVimball") | |
64 return | |
65 endif | |
66 | |
67 " create/switch to mkvimball tab | |
68 if !exists("vbtabnr") | |
69 tabnew | |
70 silent! file Vimball | |
71 let vbtabnr= tabpagenr() | |
72 else | |
73 exe "tabn ".vbtabnr | |
74 endif | |
75 | |
76 let lastline= line("$") + 1 | |
77 if lastline == 2 && getline("$") == "" | |
78 call setline(1,'" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.') | |
79 call setline(2,'UseVimball') | |
80 call setline(3,'finish') | |
81 let lastline= 4 | |
82 endif | |
83 call setline(lastline ,svfile) | |
84 call setline(lastline+1,0) | |
85 exe "$r ".svfile | |
86 call setline(lastline+1,line("$") - lastline - 1) | |
87 " call Decho("lastline=".lastline." line$=".line("$")) | |
88 | |
89 " restore to normal tab | |
90 exe "tabn ".curtabnr | |
91 let linenr= linenr + 1 | |
92 endwhile | |
93 | |
94 " write the vimball | |
95 exe "tabn ".vbtabnr | |
96 exe "cd ".curdir | |
97 if a:really | |
98 if a:writelevel | |
99 exe "w! ".vbname | |
100 else | |
101 exe "w ".vbname | |
102 endif | |
103 endif | |
104 " call Decho("Vimball<".vbname."> created") | |
105 echo "Vimball<".vbname."> created" | |
106 | |
107 " remove the evidence | |
108 setlocal nomod bh=wipe | |
109 exe "tabn ".curtabnr | |
110 exe "tabc ".vbtabnr | |
111 | |
112 " restore options | |
113 let &ei= eikeep | |
114 | |
115 " call Dret("MkVimball") | |
116 endfun | |
117 | |
118 " --------------------------------------------------------------------- | |
119 " Vimball: {{{2 | |
120 fun! vimball#Vimball(really) | |
121 " call Dfunc("Vimball(really=".a:really.")") | |
122 | |
123 if getline(1) !~ '^" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.$' | |
124 echoerr "(Vimball) The current file does not appear to be a Vimball!" | |
125 " call Dret("Vimball") | |
126 return | |
127 endif | |
128 | |
129 " initialize | |
130 let regakeep = @a | |
131 let eikeep = &ei | |
132 let vekeep = &ve | |
133 let makeep = getpos("'a") | |
134 let curtabnr = tabpagenr() | |
135 set ei=all ve=all | |
136 | |
137 " set up vimball tab | |
138 tabnew | |
139 silent! file Vimball | |
140 let vbtabnr= tabpagenr() | |
141 let didhelp= "" | |
142 | |
143 " go to vim plugin home | |
144 let home = substitute(&rtp,',.*$','','') | |
145 let curdir = getcwd() | |
146 " call Decho("exe cd ".home) | |
147 exe "cd ".home | |
148 let linenr = 4 | |
149 let filecnt = 0 | |
150 | |
151 " give title to listing of (extracted) files from Vimball Archive | |
152 if a:really | |
153 echohl Title | echomsg "Vimball Archive" | echohl None | |
154 else | |
155 echohl Title | echomsg "Vimball Archive Listing" | echohl None | |
156 endif | |
157 | |
158 " apportion vimball contents to various files | |
159 " call Decho("exe tabn ".curtabnr) | |
160 exe "tabn ".curtabnr | |
161 " call Decho("linenr=".linenr." line$=".line("$")) | |
162 while 1 < linenr && linenr < line("$") | |
163 let fname = getline(linenr) | |
164 let fsize = getline(linenr+1) | |
165 let filecnt = filecnt + 1 | |
166 if a:really | |
167 echomsg "extracted <".fname.">: ".fsize." lines" | |
168 else | |
169 echomsg "would extract <".fname.">: ".fsize." lines" | |
170 endif | |
171 " call Decho(linenr.": will extract file<".fname.">") | |
172 " call Decho((linenr+1).": fsize=".fsize) | |
173 | |
174 " make directories if they don't exist yet | |
175 let fnamebuf= fname | |
176 while fnamebuf =~ '/' | |
177 let dirname = substitute(fnamebuf,'/.*$','','e') | |
178 let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','e') | |
179 if !isdirectory(dirname) | |
180 " call Decho("making <".dirname.">") | |
181 call mkdir(dirname) | |
182 endif | |
183 exe "cd ".dirname | |
184 endwhile | |
185 exe "cd ".home | |
186 | |
187 " grab specified qty of lines and place into "a" buffer | |
188 exe linenr | |
189 norm! jjma | |
190 exe (linenr + fsize + 1) | |
191 silent norm! "ay'a | |
192 " call Decho("yanked ".fsize." lines into register-a") | |
193 | |
194 " call Decho("didhelp<".didhelp."> fname<".fname.">") | |
195 if didhelp == "" && fname =~ 'doc/[^/]\+\.txt$' | |
196 let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.txt$','\1','e') | |
197 " call Decho("didhelp<".didhelp.">") | |
198 endif | |
199 | |
200 " copy "a" buffer into tab | |
201 " call Decho('copy "a buffer into tab#'.vbtabnr) | |
202 exe "tabn ".vbtabnr | |
203 silent! %d | |
204 silent norm! "aPGdd1G | |
205 " call Decho("rega<".@a.">") | |
206 | |
207 " write tab to file | |
208 " call Decho("exe w! ".fname) | |
209 exe "silent w! ".fname | |
210 | |
211 " call Decho("exe tabn ".curtabnr) | |
212 exe "tabn ".curtabnr | |
213 " let oldlinenr = linenr " Decho | |
214 let linenr = linenr + fsize + 2 | |
215 " call Decho("update linenr= [linenr=".oldlinenr."] + [fsize=".fsize."] + 2 = ".linenr) | |
216 endwhile | |
217 | |
218 " set up help | |
219 " call Decho("about to set up help: didhelp<".didhelp.">") | |
220 if didhelp != "" | |
221 " call Decho("exe helptags ".home."/".didhelp) | |
222 exe "helptags ".home."/".didhelp | |
223 echomsg "did helptags" | |
224 endif | |
225 | |
226 " make sure a "Press ENTER..." prompt appears to keep the messages showing! | |
227 while filecnt < &ch | |
228 echomsg " " | |
229 let filecnt= filecnt + 1 | |
230 endwhile | |
231 | |
232 " restore events, delete tab and buffer | |
233 exe "tabn ".vbtabnr | |
234 setlocal nomod bh=wipe | |
235 exe "tabn ".curtabnr | |
236 exe "tabc ".vbtabnr | |
237 let &ei= eikeep | |
238 let @a = regakeep | |
239 if makeep[0] != 0 | |
240 " restore mark a | |
241 " call Decho("restore mark-a: makeep=".string(makeep)) | |
242 call setpos("'a",makeep) | |
243 ka | |
244 endif | |
245 exe "cd ".curdir | |
246 | |
247 " call Dret("Vimball") | |
248 endfun | |
249 | |
250 let &cpo= s:keepcpo | |
251 unlet s:keepcpo | |
252 " ===================================================================== | |
253 " Modelines: {{{1 | |
254 " vim: fdm=marker |