1dd2a3cdaSBram Moolenaar" vimball.vim : construct a file containing both paths and files 203413f44SBram Moolenaar" Author: Charles E. Campbell 303413f44SBram Moolenaar" Date: Apr 11, 2016 403413f44SBram Moolenaar" Version: 37 5eee697b7SBram Moolenaar" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim 603413f44SBram Moolenaar" Copyright: (c) 2004-2011 by Charles E. Campbell 7eee697b7SBram Moolenaar" The VIM LICENSE applies to Vimball.vim, and Vimball.txt 8eee697b7SBram Moolenaar" (see |copyright|) except use "Vimball" instead of "Vim". 9eee697b7SBram Moolenaar" No warranty, express or implied. 10eee697b7SBram Moolenaar" *** *** Use At-Your-Own-Risk! *** *** 11eee697b7SBram Moolenaar 12eee697b7SBram Moolenaar" --------------------------------------------------------------------- 13eee697b7SBram Moolenaar" Load Once: {{{1 145c73622aSBram Moolenaarif &cp || exists("g:loaded_vimball") 155c73622aSBram Moolenaar finish 165c73622aSBram Moolenaarendif 1703413f44SBram Moolenaarlet g:loaded_vimball = "v37" 185c73622aSBram Moolenaarif v:version < 702 195c73622aSBram Moolenaar echohl WarningMsg 205c73622aSBram Moolenaar echo "***warning*** this version of vimball needs vim 7.2" 215c73622aSBram Moolenaar echohl Normal 22eee697b7SBram Moolenaar finish 23eee697b7SBram Moolenaarendif 24eee697b7SBram Moolenaarlet s:keepcpo= &cpo 25eee697b7SBram Moolenaarset cpo&vim 26f233048aSBram Moolenaar"DechoTabOn 27eee697b7SBram Moolenaar 28eee697b7SBram Moolenaar" ===================================================================== 29dd2a3cdaSBram Moolenaar" Constants: {{{1 30dd2a3cdaSBram Moolenaarif !exists("s:USAGE") 31dd2a3cdaSBram Moolenaar let s:USAGE = 0 32dd2a3cdaSBram Moolenaar let s:WARNING = 1 33dd2a3cdaSBram Moolenaar let s:ERROR = 2 34f233048aSBram Moolenaar 35f233048aSBram Moolenaar " determine if cygwin is in use or not 36f233048aSBram Moolenaar if !exists("g:netrw_cygwin") 37f233048aSBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16") 38f233048aSBram Moolenaar if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$' 39f233048aSBram Moolenaar let g:netrw_cygwin= 1 40f233048aSBram Moolenaar else 41f233048aSBram Moolenaar let g:netrw_cygwin= 0 42f233048aSBram Moolenaar endif 43f233048aSBram Moolenaar else 44f233048aSBram Moolenaar let g:netrw_cygwin= 0 45f233048aSBram Moolenaar endif 46f233048aSBram Moolenaar endif 47f233048aSBram Moolenaar 48f233048aSBram Moolenaar " set up g:vimball_mkdir if the mkdir() call isn't defined 49f233048aSBram Moolenaar if !exists("*mkdir") 50f233048aSBram Moolenaar if exists("g:netrw_local_mkdir") 51f233048aSBram Moolenaar let g:vimball_mkdir= g:netrw_local_mkdir 52f233048aSBram Moolenaar elseif executable("mkdir") 53f233048aSBram Moolenaar let g:vimball_mkdir= "mkdir" 54f233048aSBram Moolenaar elseif executable("makedir") 55f233048aSBram Moolenaar let g:vimball_mkdir= "makedir" 56f233048aSBram Moolenaar endif 57f233048aSBram Moolenaar if !exists(g:vimball_mkdir) 58f233048aSBram Moolenaar call vimball#ShowMesg(s:WARNING,"(vimball) g:vimball_mkdir undefined") 59f233048aSBram Moolenaar endif 60f233048aSBram Moolenaar endif 61dd2a3cdaSBram Moolenaarendif 62dd2a3cdaSBram Moolenaar 63dd2a3cdaSBram Moolenaar" ===================================================================== 64eee697b7SBram Moolenaar" Functions: {{{1 65eee697b7SBram Moolenaar 66eee697b7SBram Moolenaar" --------------------------------------------------------------------- 67dd2a3cdaSBram Moolenaar" vimball#MkVimball: creates a vimball given a list of paths to files {{{2 68f233048aSBram Moolenaar" Input: 69f233048aSBram Moolenaar" line1,line2: a range of lines containing paths to files to be included in the vimball 70251e1912SBram Moolenaar" writelevel : if true, force a write to filename.vmb, even if it exists 71f233048aSBram Moolenaar" (usually accomplished with :MkVimball! ... 72251e1912SBram Moolenaar" filename : base name of file to be created (ie. filename.vmb) 73251e1912SBram Moolenaar" Output: a filename.vmb using vimball format: 74eee697b7SBram Moolenaar" path 75eee697b7SBram Moolenaar" filesize 76eee697b7SBram Moolenaar" [file] 77eee697b7SBram Moolenaar" path 78eee697b7SBram Moolenaar" filesize 79eee697b7SBram Moolenaar" [file] 80dd2a3cdaSBram Moolenaarfun! vimball#MkVimball(line1,line2,writelevel,...) range 81dd2a3cdaSBram Moolenaar" call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0) 82f233048aSBram Moolenaar if a:1 =~ '\.vim$' || a:1 =~ '\.txt$' 83251e1912SBram Moolenaar let vbname= substitute(a:1,'\.\a\{3}$','.vmb','') 84dd2a3cdaSBram Moolenaar else 85dd2a3cdaSBram Moolenaar let vbname= a:1 86dd2a3cdaSBram Moolenaar endif 87251e1912SBram Moolenaar if vbname !~ '\.vmb$' 88251e1912SBram Moolenaar let vbname= vbname.'.vmb' 89dd2a3cdaSBram Moolenaar endif 90dd2a3cdaSBram Moolenaar" call Decho("vbname<".vbname.">") 915c73622aSBram Moolenaar if !a:writelevel && a:1 =~ '[\/]' 925c73622aSBram Moolenaar call vimball#ShowMesg(s:ERROR,"(MkVimball) vimball name<".a:1."> should not include slashes; use ! to insist") 93dd2a3cdaSBram Moolenaar" call Dret("MkVimball : vimball name<".a:1."> should not include slashes") 94dd2a3cdaSBram Moolenaar return 95dd2a3cdaSBram Moolenaar endif 96eee697b7SBram Moolenaar if !a:writelevel && filereadable(vbname) 97dd2a3cdaSBram Moolenaar call vimball#ShowMesg(s:ERROR,"(MkVimball) file<".vbname."> exists; use ! to insist") 98eee697b7SBram Moolenaar" call Dret("MkVimball : file<".vbname."> already exists; use ! to insist") 99eee697b7SBram Moolenaar return 100eee697b7SBram Moolenaar endif 101eee697b7SBram Moolenaar 102eee697b7SBram Moolenaar " user option bypass 103f233048aSBram Moolenaar call vimball#SaveSettings() 104eee697b7SBram Moolenaar 105dd2a3cdaSBram Moolenaar if a:0 >= 2 106dd2a3cdaSBram Moolenaar " allow user to specify where to get the files 107dd2a3cdaSBram Moolenaar let home= expand(a:2) 108dd2a3cdaSBram Moolenaar else 109dd2a3cdaSBram Moolenaar " use first existing directory from rtp 1105c73622aSBram Moolenaar let home= vimball#VimballHome() 111f193fffdSBram Moolenaar endif 112f193fffdSBram Moolenaar 113f193fffdSBram Moolenaar " save current directory 114eee697b7SBram Moolenaar let curdir = getcwd() 115f193fffdSBram Moolenaar call s:ChgDir(home) 116eee697b7SBram Moolenaar 117eee697b7SBram Moolenaar " record current tab, initialize while loop index 118eee697b7SBram Moolenaar let curtabnr = tabpagenr() 119eee697b7SBram Moolenaar let linenr = a:line1 120eee697b7SBram Moolenaar" call Decho("curtabnr=".curtabnr) 121eee697b7SBram Moolenaar 122eee697b7SBram Moolenaar while linenr <= a:line2 123eee697b7SBram Moolenaar let svfile = getline(linenr) 124eee697b7SBram Moolenaar" call Decho("svfile<".svfile.">") 125eee697b7SBram Moolenaar 126eee697b7SBram Moolenaar if !filereadable(svfile) 127dd2a3cdaSBram Moolenaar call vimball#ShowMesg(s:ERROR,"unable to read file<".svfile.">") 128f193fffdSBram Moolenaar call s:ChgDir(curdir) 129f233048aSBram Moolenaar call vimball#RestoreSettings() 130eee697b7SBram Moolenaar" call Dret("MkVimball") 131eee697b7SBram Moolenaar return 132eee697b7SBram Moolenaar endif 133eee697b7SBram Moolenaar 134eee697b7SBram Moolenaar " create/switch to mkvimball tab 135eee697b7SBram Moolenaar if !exists("vbtabnr") 136eee697b7SBram Moolenaar tabnew 137251e1912SBram Moolenaar sil! file Vimball 138eee697b7SBram Moolenaar let vbtabnr= tabpagenr() 139eee697b7SBram Moolenaar else 140eee697b7SBram Moolenaar exe "tabn ".vbtabnr 141eee697b7SBram Moolenaar endif 142eee697b7SBram Moolenaar 143eee697b7SBram Moolenaar let lastline= line("$") + 1 144eee697b7SBram Moolenaar if lastline == 2 && getline("$") == "" 14503413f44SBram Moolenaar call setline(1,'" Vimball Archiver by Charles E. Campbell') 146eee697b7SBram Moolenaar call setline(2,'UseVimball') 147eee697b7SBram Moolenaar call setline(3,'finish') 148dd2a3cdaSBram Moolenaar let lastline= line("$") + 1 149eee697b7SBram Moolenaar endif 150dd2a3cdaSBram Moolenaar call setline(lastline ,substitute(svfile,'$',' [[[1','')) 151eee697b7SBram Moolenaar call setline(lastline+1,0) 152f193fffdSBram Moolenaar 153f193fffdSBram Moolenaar " write the file from the tab 154e37d50a5SBram Moolenaar" call Decho("exe $r ".fnameescape(svfile)) 155e37d50a5SBram Moolenaar exe "$r ".fnameescape(svfile) 156f193fffdSBram Moolenaar 157eee697b7SBram Moolenaar call setline(lastline+1,line("$") - lastline - 1) 158eee697b7SBram Moolenaar" call Decho("lastline=".lastline." line$=".line("$")) 159eee697b7SBram Moolenaar 160eee697b7SBram Moolenaar " restore to normal tab 161eee697b7SBram Moolenaar exe "tabn ".curtabnr 162eee697b7SBram Moolenaar let linenr= linenr + 1 163eee697b7SBram Moolenaar endwhile 164eee697b7SBram Moolenaar 165eee697b7SBram Moolenaar " write the vimball 166eee697b7SBram Moolenaar exe "tabn ".vbtabnr 167f193fffdSBram Moolenaar call s:ChgDir(curdir) 168f233048aSBram Moolenaar setlocal ff=unix 169eee697b7SBram Moolenaar if a:writelevel 170e37d50a5SBram Moolenaar" call Decho("exe w! ".fnameescape(vbname)) 171e37d50a5SBram Moolenaar exe "w! ".fnameescape(vbname) 172eee697b7SBram Moolenaar else 173e37d50a5SBram Moolenaar" call Decho("exe w ".fnameescape(vbname)) 174e37d50a5SBram Moolenaar exe "w ".fnameescape(vbname) 175eee697b7SBram Moolenaar endif 176eee697b7SBram Moolenaar" call Decho("Vimball<".vbname."> created") 177eee697b7SBram Moolenaar echo "Vimball<".vbname."> created" 178eee697b7SBram Moolenaar 179eee697b7SBram Moolenaar " remove the evidence 180eee697b7SBram Moolenaar setlocal nomod bh=wipe 181eee697b7SBram Moolenaar exe "tabn ".curtabnr 18203413f44SBram Moolenaar exe "tabc! ".vbtabnr 183eee697b7SBram Moolenaar 184eee697b7SBram Moolenaar " restore options 185f233048aSBram Moolenaar call vimball#RestoreSettings() 186eee697b7SBram Moolenaar 187eee697b7SBram Moolenaar" call Dret("MkVimball") 188eee697b7SBram Moolenaarendfun 189eee697b7SBram Moolenaar 190eee697b7SBram Moolenaar" --------------------------------------------------------------------- 191dd2a3cdaSBram Moolenaar" vimball#Vimball: extract and distribute contents from a vimball {{{2 192f233048aSBram Moolenaar" (invoked the the UseVimball command embedded in 193f233048aSBram Moolenaar" vimballs' prologue) 194dd2a3cdaSBram Moolenaarfun! vimball#Vimball(really,...) 195dd2a3cdaSBram Moolenaar" call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0) 196eee697b7SBram Moolenaar 197e37d50a5SBram Moolenaar if v:version < 701 || (v:version == 701 && !exists('*fnameescape')) 198251e1912SBram Moolenaar echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)" 199251e1912SBram Moolenaar" call Dret("vimball#Vimball : needs 7.1 with patch 299 or later") 200f233048aSBram Moolenaar return 201f233048aSBram Moolenaar endif 202f233048aSBram Moolenaar 2035c73622aSBram Moolenaar if getline(1) !~ '^" Vimball Archiver' 204eee697b7SBram Moolenaar echoerr "(Vimball) The current file does not appear to be a Vimball!" 205dd2a3cdaSBram Moolenaar" call Dret("vimball#Vimball") 206eee697b7SBram Moolenaar return 207eee697b7SBram Moolenaar endif 208eee697b7SBram Moolenaar 20925e2c9e3SBram Moolenaar " set up standard settings 210f233048aSBram Moolenaar call vimball#SaveSettings() 211eee697b7SBram Moolenaar let curtabnr = tabpagenr() 212f233048aSBram Moolenaar let vimballfile = expand("%:tr") 213eee697b7SBram Moolenaar 214eee697b7SBram Moolenaar " set up vimball tab 215dd2a3cdaSBram Moolenaar" call Decho("setting up vimball tab") 216eee697b7SBram Moolenaar tabnew 217251e1912SBram Moolenaar sil! file Vimball 218eee697b7SBram Moolenaar let vbtabnr= tabpagenr() 219eee697b7SBram Moolenaar let didhelp= "" 220eee697b7SBram Moolenaar 221eee697b7SBram Moolenaar " go to vim plugin home 222dd2a3cdaSBram Moolenaar if a:0 > 0 2231514667aSBram Moolenaar " let user specify the directory where the vimball is to be unpacked. 2241514667aSBram Moolenaar " If, however, the user did not specify a full path, set the home to be below the current directory 225dd2a3cdaSBram Moolenaar let home= expand(a:1) 2261514667aSBram Moolenaar if has("win32") || has("win95") || has("win64") || has("win16") 2271514667aSBram Moolenaar if home !~ '^\a:[/\\]' 2281514667aSBram Moolenaar let home= getcwd().'/'.a:1 2291514667aSBram Moolenaar endif 2301514667aSBram Moolenaar elseif home !~ '^/' 2311514667aSBram Moolenaar let home= getcwd().'/'.a:1 2321514667aSBram Moolenaar endif 233dd2a3cdaSBram Moolenaar else 2345c73622aSBram Moolenaar let home= vimball#VimballHome() 235f193fffdSBram Moolenaar endif 236f193fffdSBram Moolenaar" call Decho("home<".home.">") 237f193fffdSBram Moolenaar 238dd2a3cdaSBram Moolenaar " save current directory and remove older same-named vimball, if any 239eee697b7SBram Moolenaar let curdir = getcwd() 240dd2a3cdaSBram Moolenaar" call Decho("home<".home.">") 241dd2a3cdaSBram Moolenaar" call Decho("curdir<".curdir.">") 242dd2a3cdaSBram Moolenaar 243f193fffdSBram Moolenaar call s:ChgDir(home) 244f233048aSBram Moolenaar let s:ok_unablefind= 1 245f233048aSBram Moolenaar call vimball#RmVimball(vimballfile) 246f233048aSBram Moolenaar unlet s:ok_unablefind 247f193fffdSBram Moolenaar 248eee697b7SBram Moolenaar let linenr = 4 249eee697b7SBram Moolenaar let filecnt = 0 250eee697b7SBram Moolenaar 251eee697b7SBram Moolenaar " give title to listing of (extracted) files from Vimball Archive 252eee697b7SBram Moolenaar if a:really 253eee697b7SBram Moolenaar echohl Title | echomsg "Vimball Archive" | echohl None 254eee697b7SBram Moolenaar else 255eee697b7SBram Moolenaar echohl Title | echomsg "Vimball Archive Listing" | echohl None 25625e2c9e3SBram Moolenaar echohl Statement | echomsg "files would be placed under: ".home | echohl None 257eee697b7SBram Moolenaar endif 258eee697b7SBram Moolenaar 259eee697b7SBram Moolenaar " apportion vimball contents to various files 260eee697b7SBram Moolenaar" call Decho("exe tabn ".curtabnr) 261eee697b7SBram Moolenaar exe "tabn ".curtabnr 262eee697b7SBram Moolenaar" call Decho("linenr=".linenr." line$=".line("$")) 263eee697b7SBram Moolenaar while 1 < linenr && linenr < line("$") 264dd2a3cdaSBram Moolenaar let fname = substitute(getline(linenr),'\t\[\[\[1$','','') 265dd2a3cdaSBram Moolenaar let fname = substitute(fname,'\\','/','g') 2665c73622aSBram Moolenaar let fsize = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0 267251e1912SBram Moolenaar let fenc = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','') 268eee697b7SBram Moolenaar let filecnt = filecnt + 1 269251e1912SBram Moolenaar" call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc) 270dd2a3cdaSBram Moolenaar 271eee697b7SBram Moolenaar if a:really 272eee697b7SBram Moolenaar echomsg "extracted <".fname.">: ".fsize." lines" 273eee697b7SBram Moolenaar else 274eee697b7SBram Moolenaar echomsg "would extract <".fname.">: ".fsize." lines" 275eee697b7SBram Moolenaar endif 276f9393ef5SBram Moolenaar" call Decho("using L#".linenr.": will extract file<".fname.">") 277f9393ef5SBram Moolenaar" call Decho("using L#".(linenr+1).": fsize=".fsize) 278eee697b7SBram Moolenaar 279dd2a3cdaSBram Moolenaar " Allow AsNeeded/ directory to take place of plugin/ directory 280f233048aSBram Moolenaar " when AsNeeded/filename is filereadable or was present in VimballRecord 281dd2a3cdaSBram Moolenaar if fname =~ '\<plugin/' 282dd2a3cdaSBram Moolenaar let anfname= substitute(fname,'\<plugin/','AsNeeded/','') 28303413f44SBram Moolenaar if filereadable(anfname) || (exists("s:VBRstring") && s:VBRstring =~# anfname) 284dd2a3cdaSBram Moolenaar" call Decho("using anfname<".anfname."> instead of <".fname.">") 285dd2a3cdaSBram Moolenaar let fname= anfname 286dd2a3cdaSBram Moolenaar endif 287dd2a3cdaSBram Moolenaar endif 288dd2a3cdaSBram Moolenaar 289eee697b7SBram Moolenaar " make directories if they don't exist yet 29025e2c9e3SBram Moolenaar if a:really 291dd2a3cdaSBram Moolenaar" call Decho("making directories if they don't exist yet (fname<".fname.">)") 292dd2a3cdaSBram Moolenaar let fnamebuf= substitute(fname,'\\','/','g') 293dd2a3cdaSBram Moolenaar let dirpath = substitute(home,'\\','/','g') 2941514667aSBram Moolenaar" call Decho("init: fnamebuf<".fnamebuf.">") 2951514667aSBram Moolenaar" call Decho("init: dirpath <".dirpath.">") 296eee697b7SBram Moolenaar while fnamebuf =~ '/' 297dd2a3cdaSBram Moolenaar let dirname = dirpath."/".substitute(fnamebuf,'/.*$','','') 298dd2a3cdaSBram Moolenaar let dirpath = dirname 299dd2a3cdaSBram Moolenaar let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','') 300dd2a3cdaSBram Moolenaar" call Decho("dirname<".dirname.">") 3011514667aSBram Moolenaar" call Decho("dirpath<".dirpath.">") 302eee697b7SBram Moolenaar if !isdirectory(dirname) 303eee697b7SBram Moolenaar" call Decho("making <".dirname.">") 304f233048aSBram Moolenaar if exists("g:vimball_mkdir") 3055c73622aSBram Moolenaar call system(g:vimball_mkdir." ".shellescape(dirname)) 306f233048aSBram Moolenaar else 307eee697b7SBram Moolenaar call mkdir(dirname) 308f233048aSBram Moolenaar endif 309dd2a3cdaSBram Moolenaar call s:RecordInVar(home,"rmdir('".dirname."')") 310eee697b7SBram Moolenaar endif 311eee697b7SBram Moolenaar endwhile 31225e2c9e3SBram Moolenaar endif 313f193fffdSBram Moolenaar call s:ChgDir(home) 314eee697b7SBram Moolenaar 315eee697b7SBram Moolenaar " grab specified qty of lines and place into "a" buffer 316f9393ef5SBram Moolenaar " (skip over path/filename and qty-lines) 317f9393ef5SBram Moolenaar let linenr = linenr + 2 318f9393ef5SBram Moolenaar let lastline = linenr + fsize - 1 319f9393ef5SBram Moolenaar" call Decho("exe ".linenr.",".lastline."yank a") 320251e1912SBram Moolenaar " no point in handling a zero-length file 321251e1912SBram Moolenaar if lastline >= linenr 322f193fffdSBram Moolenaar exe "silent ".linenr.",".lastline."yank a" 323eee697b7SBram Moolenaar 324eee697b7SBram Moolenaar " copy "a" buffer into tab 325eee697b7SBram Moolenaar" call Decho('copy "a buffer into tab#'.vbtabnr) 326eee697b7SBram Moolenaar exe "tabn ".vbtabnr 327f233048aSBram Moolenaar setlocal ma 328251e1912SBram Moolenaar sil! %d 329f193fffdSBram Moolenaar silent put a 330f9393ef5SBram Moolenaar 1 331251e1912SBram Moolenaar sil! d 332eee697b7SBram Moolenaar 333eee697b7SBram Moolenaar " write tab to file 3348ab561d3SBram Moolenaar if a:really 335e37d50a5SBram Moolenaar let fnamepath= home."/".fname 336f233048aSBram Moolenaar" call Decho("exe w! ".fnameescape(fnamepath)) 3375c73622aSBram Moolenaar if fenc != "" 3385c73622aSBram Moolenaar exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath) 3395c73622aSBram Moolenaar else 340f233048aSBram Moolenaar exe "silent w! ".fnameescape(fnamepath) 3415c73622aSBram Moolenaar endif 3425c73622aSBram Moolenaar echo "wrote ".fnameescape(fnamepath) 3435c73622aSBram Moolenaar call s:RecordInVar(home,"call delete('".fnamepath."')") 3448ab561d3SBram Moolenaar endif 345eee697b7SBram Moolenaar 346f9393ef5SBram Moolenaar " return to tab with vimball 347eee697b7SBram Moolenaar" call Decho("exe tabn ".curtabnr) 348eee697b7SBram Moolenaar exe "tabn ".curtabnr 349f9393ef5SBram Moolenaar 350*3e496b0eSBram Moolenaar " set up help if it's a doc/*.txt file 351f9393ef5SBram Moolenaar" call Decho("didhelp<".didhelp."> fname<".fname.">") 352f233048aSBram Moolenaar if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$' 353f233048aSBram Moolenaar let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','') 354f9393ef5SBram Moolenaar" call Decho("didhelp<".didhelp.">") 355f9393ef5SBram Moolenaar endif 356251e1912SBram Moolenaar endif 357f9393ef5SBram Moolenaar 358f9393ef5SBram Moolenaar " update for next file 359f233048aSBram Moolenaar" call Decho("update linenr= [linenr=".linenr."] + [fsize=".fsize."] = ".(linenr+fsize)) 360f9393ef5SBram Moolenaar let linenr= linenr + fsize 361eee697b7SBram Moolenaar endwhile 362eee697b7SBram Moolenaar 363eee697b7SBram Moolenaar " set up help 364eee697b7SBram Moolenaar" call Decho("about to set up help: didhelp<".didhelp.">") 365eee697b7SBram Moolenaar if didhelp != "" 366e37d50a5SBram Moolenaar let htpath= home."/".didhelp 367f193fffdSBram Moolenaar" call Decho("exe helptags ".htpath) 368e37d50a5SBram Moolenaar exe "helptags ".fnameescape(htpath) 369f193fffdSBram Moolenaar echo "did helptags" 370eee697b7SBram Moolenaar endif 371eee697b7SBram Moolenaar 372eee697b7SBram Moolenaar " make sure a "Press ENTER..." prompt appears to keep the messages showing! 3738ab561d3SBram Moolenaar while filecnt <= &ch 374eee697b7SBram Moolenaar echomsg " " 375eee697b7SBram Moolenaar let filecnt= filecnt + 1 376eee697b7SBram Moolenaar endwhile 377eee697b7SBram Moolenaar 378dd2a3cdaSBram Moolenaar " record actions in <.VimballRecord> 379dd2a3cdaSBram Moolenaar call s:RecordInFile(home) 380dd2a3cdaSBram Moolenaar 381eee697b7SBram Moolenaar " restore events, delete tab and buffer 38203413f44SBram Moolenaar exe "sil! tabn ".vbtabnr 383eee697b7SBram Moolenaar setlocal nomod bh=wipe 38403413f44SBram Moolenaar exe "sil! tabn ".curtabnr 38503413f44SBram Moolenaar exe "sil! tabc! ".vbtabnr 386f233048aSBram Moolenaar call vimball#RestoreSettings() 387f193fffdSBram Moolenaar call s:ChgDir(curdir) 388eee697b7SBram Moolenaar 389dd2a3cdaSBram Moolenaar" call Dret("vimball#Vimball") 390dd2a3cdaSBram Moolenaarendfun 391dd2a3cdaSBram Moolenaar 392dd2a3cdaSBram Moolenaar" --------------------------------------------------------------------- 393dd2a3cdaSBram Moolenaar" vimball#RmVimball: remove any files, remove any directories made by any {{{2 394dd2a3cdaSBram Moolenaar" previous vimball extraction based on a file of the current 395dd2a3cdaSBram Moolenaar" name. 396dd2a3cdaSBram Moolenaar" Usage: RmVimball (assume current file is a vimball; remove) 397dd2a3cdaSBram Moolenaar" RmVimball vimballname 398dd2a3cdaSBram Moolenaarfun! vimball#RmVimball(...) 399dd2a3cdaSBram Moolenaar" call Dfunc("vimball#RmVimball() a:0=".a:0) 400dd2a3cdaSBram Moolenaar if exists("g:vimball_norecord") 401dd2a3cdaSBram Moolenaar" call Dret("vimball#RmVimball : (g:vimball_norecord)") 402dd2a3cdaSBram Moolenaar return 403dd2a3cdaSBram Moolenaar endif 404dd2a3cdaSBram Moolenaar 405dd2a3cdaSBram Moolenaar if a:0 == 0 406f233048aSBram Moolenaar let curfile= expand("%:tr") 407f233048aSBram Moolenaar" call Decho("case a:0=0: curfile<".curfile."> (used expand(%:tr))") 408dd2a3cdaSBram Moolenaar else 409dd2a3cdaSBram Moolenaar if a:1 =~ '[\/]' 410dd2a3cdaSBram Moolenaar call vimball#ShowMesg(s:USAGE,"RmVimball vimballname [path]") 411dd2a3cdaSBram Moolenaar" call Dret("vimball#RmVimball : suspect a:1<".a:1.">") 412dd2a3cdaSBram Moolenaar return 413dd2a3cdaSBram Moolenaar endif 414dd2a3cdaSBram Moolenaar let curfile= a:1 415f233048aSBram Moolenaar" call Decho("case a:0=".a:0.": curfile<".curfile.">") 416dd2a3cdaSBram Moolenaar endif 417251e1912SBram Moolenaar if curfile =~ '\.vmb$' 418251e1912SBram Moolenaar let curfile= substitute(curfile,'\.vmb','','') 419251e1912SBram Moolenaar elseif curfile =~ '\.vba$' 420f233048aSBram Moolenaar let curfile= substitute(curfile,'\.vba','','') 421dd2a3cdaSBram Moolenaar endif 422dd2a3cdaSBram Moolenaar if a:0 >= 2 423dd2a3cdaSBram Moolenaar let home= expand(a:2) 424dd2a3cdaSBram Moolenaar else 4255c73622aSBram Moolenaar let home= vimball#VimballHome() 426dd2a3cdaSBram Moolenaar endif 427dd2a3cdaSBram Moolenaar let curdir = getcwd() 428dd2a3cdaSBram Moolenaar" call Decho("home <".home.">") 429dd2a3cdaSBram Moolenaar" call Decho("curfile<".curfile.">") 430dd2a3cdaSBram Moolenaar" call Decho("curdir <".curdir.">") 431dd2a3cdaSBram Moolenaar 432dd2a3cdaSBram Moolenaar call s:ChgDir(home) 433dd2a3cdaSBram Moolenaar if filereadable(".VimballRecord") 434dd2a3cdaSBram Moolenaar" call Decho(".VimballRecord is readable") 435dd2a3cdaSBram Moolenaar" call Decho("curfile<".curfile.">") 436dd2a3cdaSBram Moolenaar keepalt keepjumps 1split 437251e1912SBram Moolenaar sil! keepalt keepjumps e .VimballRecord 438dd2a3cdaSBram Moolenaar let keepsrch= @/ 4395c73622aSBram Moolenaar" call Decho('search for ^\M'.curfile.'.\m: ') 440251e1912SBram Moolenaar" call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ') 441251e1912SBram Moolenaar" call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ') 4425c73622aSBram Moolenaar if search('^\M'.curfile."\m: ".'cw') 443f233048aSBram Moolenaar let foundit= 1 444251e1912SBram Moolenaar elseif search('^\M'.curfile.".\mvmb: ",'cw') 445251e1912SBram Moolenaar let foundit= 2 446251e1912SBram Moolenaar elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw') 447251e1912SBram Moolenaar let foundit= 2 4485c73622aSBram Moolenaar elseif search('^\M'.curfile.".\mvba: ",'cw') 449f233048aSBram Moolenaar let foundit= 1 4505c73622aSBram Moolenaar elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw') 451f233048aSBram Moolenaar let foundit= 1 452f233048aSBram Moolenaar else 453f233048aSBram Moolenaar let foundit = 0 454f233048aSBram Moolenaar endif 455f233048aSBram Moolenaar if foundit 456251e1912SBram Moolenaar if foundit == 1 4575c73622aSBram Moolenaar let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','') 458251e1912SBram Moolenaar else 459251e1912SBram Moolenaar let exestring = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','') 460251e1912SBram Moolenaar endif 461f233048aSBram Moolenaar let s:VBRstring= substitute(exestring,'call delete(','','g') 462f233048aSBram Moolenaar let s:VBRstring= substitute(s:VBRstring,"[')]",'','g') 463dd2a3cdaSBram Moolenaar" call Decho("exe ".exestring) 464251e1912SBram Moolenaar sil! keepalt keepjumps exe exestring 465251e1912SBram Moolenaar sil! keepalt keepjumps d 466f233048aSBram Moolenaar let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g")) 467f233048aSBram Moolenaar" call Decho("exestring<".exestring.">") 468f233048aSBram Moolenaar echomsg "removed ".exestring." files" 469dd2a3cdaSBram Moolenaar else 470f233048aSBram Moolenaar let s:VBRstring= '' 471251e1912SBram Moolenaar let curfile = substitute(curfile,'\.vmb','','') 472dd2a3cdaSBram Moolenaar" call Decho("unable to find <".curfile."> in .VimballRecord") 473f233048aSBram Moolenaar if !exists("s:ok_unablefind") 474f233048aSBram Moolenaar call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord") 475f233048aSBram Moolenaar endif 476dd2a3cdaSBram Moolenaar endif 477251e1912SBram Moolenaar sil! keepalt keepjumps g/^\s*$/d 478251e1912SBram Moolenaar sil! keepalt keepjumps wq! 479dd2a3cdaSBram Moolenaar let @/= keepsrch 480dd2a3cdaSBram Moolenaar endif 481dd2a3cdaSBram Moolenaar call s:ChgDir(curdir) 482dd2a3cdaSBram Moolenaar 483dd2a3cdaSBram Moolenaar" call Dret("vimball#RmVimball") 484eee697b7SBram Moolenaarendfun 485eee697b7SBram Moolenaar 486551dbcc9SBram Moolenaar" --------------------------------------------------------------------- 487551dbcc9SBram Moolenaar" vimball#Decompress: attempts to automatically decompress vimballs {{{2 4885c73622aSBram Moolenaarfun! vimball#Decompress(fname,...) 4895c73622aSBram Moolenaar" call Dfunc("Decompress(fname<".a:fname.">) a:0=".a:0) 490551dbcc9SBram Moolenaar 491551dbcc9SBram Moolenaar " decompression: 492551dbcc9SBram Moolenaar if expand("%") =~ '.*\.gz' && executable("gunzip") 493f233048aSBram Moolenaar " handle *.gz with gunzip 4945c73622aSBram Moolenaar silent exe "!gunzip ".shellescape(a:fname) 495f233048aSBram Moolenaar if v:shell_error != 0 496f233048aSBram Moolenaar call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) gunzip may have failed with <".a:fname.">") 497f233048aSBram Moolenaar endif 498551dbcc9SBram Moolenaar let fname= substitute(a:fname,'\.gz$','','') 499f193fffdSBram Moolenaar exe "e ".escape(fname,' \') 5005c73622aSBram Moolenaar if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif 501f233048aSBram Moolenaar 502f233048aSBram Moolenaar elseif expand("%") =~ '.*\.gz' && executable("gzip") 503f233048aSBram Moolenaar " handle *.gz with gzip -d 5045c73622aSBram Moolenaar silent exe "!gzip -d ".shellescape(a:fname) 505f233048aSBram Moolenaar if v:shell_error != 0 506f233048aSBram Moolenaar call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "gzip -d" may have failed with <'.a:fname.">") 507f233048aSBram Moolenaar endif 508f233048aSBram Moolenaar let fname= substitute(a:fname,'\.gz$','','') 509f233048aSBram Moolenaar exe "e ".escape(fname,' \') 5105c73622aSBram Moolenaar if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif 511f233048aSBram Moolenaar 512551dbcc9SBram Moolenaar elseif expand("%") =~ '.*\.bz2' && executable("bunzip2") 513f233048aSBram Moolenaar " handle *.bz2 with bunzip2 5145c73622aSBram Moolenaar silent exe "!bunzip2 ".shellescape(a:fname) 515f233048aSBram Moolenaar if v:shell_error != 0 516f233048aSBram Moolenaar call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) bunzip2 may have failed with <".a:fname.">") 517f233048aSBram Moolenaar endif 518551dbcc9SBram Moolenaar let fname= substitute(a:fname,'\.bz2$','','') 519f193fffdSBram Moolenaar exe "e ".escape(fname,' \') 5205c73622aSBram Moolenaar if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif 521f233048aSBram Moolenaar 522f233048aSBram Moolenaar elseif expand("%") =~ '.*\.bz2' && executable("bzip2") 523f233048aSBram Moolenaar " handle *.bz2 with bzip2 -d 5245c73622aSBram Moolenaar silent exe "!bzip2 -d ".shellescape(a:fname) 525f233048aSBram Moolenaar if v:shell_error != 0 526f233048aSBram Moolenaar call vimball#ShowMesg(s:WARNING,'(vimball#Decompress) "bzip2 -d" may have failed with <'.a:fname.">") 527f233048aSBram Moolenaar endif 528f233048aSBram Moolenaar let fname= substitute(a:fname,'\.bz2$','','') 529f233048aSBram Moolenaar exe "e ".escape(fname,' \') 5305c73622aSBram Moolenaar if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif 531f233048aSBram Moolenaar 532551dbcc9SBram Moolenaar elseif expand("%") =~ '.*\.zip' && executable("unzip") 533f233048aSBram Moolenaar " handle *.zip with unzip 5345c73622aSBram Moolenaar silent exe "!unzip ".shellescape(a:fname) 535f233048aSBram Moolenaar if v:shell_error != 0 536f233048aSBram Moolenaar call vimball#ShowMesg(s:WARNING,"(vimball#Decompress) unzip may have failed with <".a:fname.">") 537f233048aSBram Moolenaar endif 538551dbcc9SBram Moolenaar let fname= substitute(a:fname,'\.zip$','','') 539f193fffdSBram Moolenaar exe "e ".escape(fname,' \') 5405c73622aSBram Moolenaar if a:0 == 0| call vimball#ShowMesg(s:USAGE,"Source this file to extract it! (:so %)") | endif 541551dbcc9SBram Moolenaar endif 542f233048aSBram Moolenaar 5435c73622aSBram Moolenaar if a:0 == 0| setlocal noma bt=nofile fmr=[[[,]]] fdm=marker | endif 544551dbcc9SBram Moolenaar 545551dbcc9SBram Moolenaar" call Dret("Decompress") 546551dbcc9SBram Moolenaarendfun 547551dbcc9SBram Moolenaar 548f193fffdSBram Moolenaar" --------------------------------------------------------------------- 549dd2a3cdaSBram Moolenaar" vimball#ShowMesg: {{{2 550dd2a3cdaSBram Moolenaarfun! vimball#ShowMesg(level,msg) 551dd2a3cdaSBram Moolenaar" call Dfunc("vimball#ShowMesg(level=".a:level." msg<".a:msg.">)") 5525c73622aSBram Moolenaar 553dd2a3cdaSBram Moolenaar let rulerkeep = &ruler 554dd2a3cdaSBram Moolenaar let showcmdkeep = &showcmd 555dd2a3cdaSBram Moolenaar set noruler noshowcmd 556dd2a3cdaSBram Moolenaar redraw! 557dd2a3cdaSBram Moolenaar 55803413f44SBram Moolenaar if &fo =~# '[ta]' 5595c73622aSBram Moolenaar echomsg "***vimball*** ".a:msg 560dd2a3cdaSBram Moolenaar else 561dd2a3cdaSBram Moolenaar if a:level == s:WARNING || a:level == s:USAGE 562dd2a3cdaSBram Moolenaar echohl WarningMsg 563dd2a3cdaSBram Moolenaar elseif a:level == s:ERROR 564dd2a3cdaSBram Moolenaar echohl Error 565dd2a3cdaSBram Moolenaar endif 5665c73622aSBram Moolenaar echomsg "***vimball*** ".a:msg 567dd2a3cdaSBram Moolenaar echohl None 568dd2a3cdaSBram Moolenaar endif 569dd2a3cdaSBram Moolenaar 570dd2a3cdaSBram Moolenaar if a:level != s:USAGE 571dd2a3cdaSBram Moolenaar call inputsave()|let ok= input("Press <cr> to continue")|call inputrestore() 572dd2a3cdaSBram Moolenaar endif 573dd2a3cdaSBram Moolenaar 574dd2a3cdaSBram Moolenaar let &ruler = rulerkeep 575dd2a3cdaSBram Moolenaar let &showcmd = showcmdkeep 576dd2a3cdaSBram Moolenaar 577dd2a3cdaSBram Moolenaar" call Dret("vimball#ShowMesg") 578dd2a3cdaSBram Moolenaarendfun 579dd2a3cdaSBram Moolenaar" ===================================================================== 580dd2a3cdaSBram Moolenaar" s:ChgDir: change directory (in spite of Windoze) {{{2 581f193fffdSBram Moolenaarfun! s:ChgDir(newdir) 582f193fffdSBram Moolenaar" call Dfunc("ChgDir(newdir<".a:newdir.">)") 583f193fffdSBram Moolenaar if (has("win32") || has("win95") || has("win64") || has("win16")) 5841514667aSBram Moolenaar try 585f233048aSBram Moolenaar exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g')) 5861514667aSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E/ 5871514667aSBram Moolenaar call mkdir(fnameescape(substitute(a:newdir,'/','\\','g'))) 5881514667aSBram Moolenaar exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g')) 5891514667aSBram Moolenaar endtry 590f193fffdSBram Moolenaar else 5911514667aSBram Moolenaar try 592f233048aSBram Moolenaar exe 'silent cd '.fnameescape(a:newdir) 5931514667aSBram Moolenaar catch /^Vim\%((\a\+)\)\=:E/ 5941514667aSBram Moolenaar call mkdir(fnameescape(a:newdir)) 5951514667aSBram Moolenaar exe 'silent cd '.fnameescape(a:newdir) 5961514667aSBram Moolenaar endtry 597f193fffdSBram Moolenaar endif 598f233048aSBram Moolenaar" call Dret("ChgDir : curdir<".getcwd().">") 599f193fffdSBram Moolenaarendfun 600f193fffdSBram Moolenaar 601f193fffdSBram Moolenaar" --------------------------------------------------------------------- 602dd2a3cdaSBram Moolenaar" s:RecordInVar: record a un-vimball command in the .VimballRecord file {{{2 603dd2a3cdaSBram Moolenaarfun! s:RecordInVar(home,cmd) 604dd2a3cdaSBram Moolenaar" call Dfunc("RecordInVar(home<".a:home."> cmd<".a:cmd.">)") 605dd2a3cdaSBram Moolenaar if a:cmd =~ '^rmdir' 606dd2a3cdaSBram Moolenaar" if !exists("s:recorddir") 607dd2a3cdaSBram Moolenaar" let s:recorddir= substitute(a:cmd,'^rmdir',"call s:Rmdir",'') 608dd2a3cdaSBram Moolenaar" else 609dd2a3cdaSBram Moolenaar" let s:recorddir= s:recorddir."|".substitute(a:cmd,'^rmdir',"call s:Rmdir",'') 610dd2a3cdaSBram Moolenaar" endif 611dd2a3cdaSBram Moolenaar elseif !exists("s:recordfile") 612dd2a3cdaSBram Moolenaar let s:recordfile= a:cmd 613dd2a3cdaSBram Moolenaar else 614dd2a3cdaSBram Moolenaar let s:recordfile= s:recordfile."|".a:cmd 615dd2a3cdaSBram Moolenaar endif 616f233048aSBram Moolenaar" call Dret("RecordInVar : s:recordfile<".(exists("s:recordfile")? s:recordfile : "")."> s:recorddir<".(exists("s:recorddir")? s:recorddir : "").">") 617dd2a3cdaSBram Moolenaarendfun 618dd2a3cdaSBram Moolenaar 619dd2a3cdaSBram Moolenaar" --------------------------------------------------------------------- 620dd2a3cdaSBram Moolenaar" s:RecordInFile: {{{2 621dd2a3cdaSBram Moolenaarfun! s:RecordInFile(home) 622f233048aSBram Moolenaar" call Dfunc("s:RecordInFile()") 623dd2a3cdaSBram Moolenaar if exists("g:vimball_norecord") 624f233048aSBram Moolenaar" call Dret("s:RecordInFile : g:vimball_norecord") 625dd2a3cdaSBram Moolenaar return 626dd2a3cdaSBram Moolenaar endif 627dd2a3cdaSBram Moolenaar 628dd2a3cdaSBram Moolenaar if exists("s:recordfile") || exists("s:recorddir") 629dd2a3cdaSBram Moolenaar let curdir= getcwd() 630dd2a3cdaSBram Moolenaar call s:ChgDir(a:home) 631dd2a3cdaSBram Moolenaar keepalt keepjumps 1split 632f233048aSBram Moolenaar 633dd2a3cdaSBram Moolenaar let cmd= expand("%:tr").": " 634f233048aSBram Moolenaar" call Decho("cmd<".cmd.">") 635f233048aSBram Moolenaar 636251e1912SBram Moolenaar sil! keepalt keepjumps e .VimballRecord 637f233048aSBram Moolenaar setlocal ma 638dd2a3cdaSBram Moolenaar $ 639dd2a3cdaSBram Moolenaar if exists("s:recordfile") && exists("s:recorddir") 640dd2a3cdaSBram Moolenaar let cmd= cmd.s:recordfile."|".s:recorddir 641dd2a3cdaSBram Moolenaar elseif exists("s:recorddir") 642dd2a3cdaSBram Moolenaar let cmd= cmd.s:recorddir 643dd2a3cdaSBram Moolenaar elseif exists("s:recordfile") 644dd2a3cdaSBram Moolenaar let cmd= cmd.s:recordfile 645dd2a3cdaSBram Moolenaar else 646f233048aSBram Moolenaar" call Dret("s:RecordInFile : neither recordfile nor recorddir exist") 647dd2a3cdaSBram Moolenaar return 648dd2a3cdaSBram Moolenaar endif 649f233048aSBram Moolenaar" call Decho("cmd<".cmd.">") 650f233048aSBram Moolenaar 651f233048aSBram Moolenaar " put command into buffer, write .VimballRecord `file 652dd2a3cdaSBram Moolenaar keepalt keepjumps put=cmd 653251e1912SBram Moolenaar sil! keepalt keepjumps g/^\s*$/d 654251e1912SBram Moolenaar sil! keepalt keepjumps wq! 655dd2a3cdaSBram Moolenaar call s:ChgDir(curdir) 656f233048aSBram Moolenaar 657f233048aSBram Moolenaar if exists("s:recorddir") 658f233048aSBram Moolenaar" call Decho("unlet s:recorddir<".s:recorddir.">") 659f233048aSBram Moolenaar unlet s:recorddir 660f233048aSBram Moolenaar endif 661f233048aSBram Moolenaar if exists("s:recordfile") 662f233048aSBram Moolenaar" call Decho("unlet s:recordfile<".s:recordfile.">") 663f233048aSBram Moolenaar unlet s:recordfile 664f233048aSBram Moolenaar endif 665dd2a3cdaSBram Moolenaar else 666dd2a3cdaSBram Moolenaar" call Decho("s:record[file|dir] doesn't exist") 667dd2a3cdaSBram Moolenaar endif 668dd2a3cdaSBram Moolenaar 669f233048aSBram Moolenaar" call Dret("s:RecordInFile") 670dd2a3cdaSBram Moolenaarendfun 671dd2a3cdaSBram Moolenaar 672dd2a3cdaSBram Moolenaar" --------------------------------------------------------------------- 6735c73622aSBram Moolenaar" vimball#VimballHome: determine/get home directory path (usually from rtp) {{{2 6745c73622aSBram Moolenaarfun! vimball#VimballHome() 6755c73622aSBram Moolenaar" call Dfunc("vimball#VimballHome()") 676dd2a3cdaSBram Moolenaar if exists("g:vimball_home") 677dd2a3cdaSBram Moolenaar let home= g:vimball_home 678dd2a3cdaSBram Moolenaar else 679dd2a3cdaSBram Moolenaar " go to vim plugin home 680dd2a3cdaSBram Moolenaar for home in split(&rtp,',') + [''] 681dd2a3cdaSBram Moolenaar if isdirectory(home) && filewritable(home) | break | endif 682f233048aSBram Moolenaar let basehome= substitute(home,'[/\\]\.vim$','','') 683f233048aSBram Moolenaar if isdirectory(basehome) && filewritable(basehome) 684f233048aSBram Moolenaar let home= basehome."/.vim" 685f233048aSBram Moolenaar break 686f233048aSBram Moolenaar endif 687dd2a3cdaSBram Moolenaar endfor 688dd2a3cdaSBram Moolenaar if home == "" 689dd2a3cdaSBram Moolenaar " just pick the first directory 690dd2a3cdaSBram Moolenaar let home= substitute(&rtp,',.*$','','') 691dd2a3cdaSBram Moolenaar endif 692dd2a3cdaSBram Moolenaar if (has("win32") || has("win95") || has("win64") || has("win16")) 693dd2a3cdaSBram Moolenaar let home= substitute(home,'/','\\','g') 694dd2a3cdaSBram Moolenaar endif 695dd2a3cdaSBram Moolenaar endif 696f233048aSBram Moolenaar " insure that the home directory exists 697f233048aSBram Moolenaar" call Decho("picked home<".home.">") 698f233048aSBram Moolenaar if !isdirectory(home) 699f233048aSBram Moolenaar if exists("g:vimball_mkdir") 700f233048aSBram Moolenaar" call Decho("home<".home."> isn't a directory -- making it now with g:vimball_mkdir<".g:vimball_mkdir.">") 7015c73622aSBram Moolenaar" call Decho("system(".g:vimball_mkdir." ".shellescape(home).")") 7025c73622aSBram Moolenaar call system(g:vimball_mkdir." ".shellescape(home)) 703f233048aSBram Moolenaar else 704f233048aSBram Moolenaar" call Decho("home<".home."> isn't a directory -- making it now with mkdir()") 705f233048aSBram Moolenaar call mkdir(home) 706f233048aSBram Moolenaar endif 707f233048aSBram Moolenaar endif 7085c73622aSBram Moolenaar" call Dret("vimball#VimballHome <".home.">") 709dd2a3cdaSBram Moolenaar return home 710f193fffdSBram Moolenaarendfun 711f193fffdSBram Moolenaar 712f193fffdSBram Moolenaar" --------------------------------------------------------------------- 713f233048aSBram Moolenaar" vimball#SaveSettings: {{{2 714f233048aSBram Moolenaarfun! vimball#SaveSettings() 71525e2c9e3SBram Moolenaar" call Dfunc("SaveSettings()") 71625e2c9e3SBram Moolenaar let s:makeep = getpos("'a") 71725e2c9e3SBram Moolenaar let s:regakeep= @a 71803413f44SBram Moolenaar if exists("+acd") 71925e2c9e3SBram Moolenaar let s:acdkeep = &acd 720d68071d8SBram Moolenaar endif 72125e2c9e3SBram Moolenaar let s:eikeep = &ei 722e37d50a5SBram Moolenaar let s:fenkeep = &l:fen 72325e2c9e3SBram Moolenaar let s:hidkeep = &hidden 72425e2c9e3SBram Moolenaar let s:ickeep = &ic 725143c38cdSBram Moolenaar let s:lzkeep = &lz 726143c38cdSBram Moolenaar let s:pmkeep = &pm 72725e2c9e3SBram Moolenaar let s:repkeep = &report 72825e2c9e3SBram Moolenaar let s:vekeep = &ve 729e37d50a5SBram Moolenaar let s:ffkeep = &l:ff 730251e1912SBram Moolenaar let s:swfkeep = &l:swf 73103413f44SBram Moolenaar if exists("+acd") 732251e1912SBram Moolenaar setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf 733d68071d8SBram Moolenaar else 734251e1912SBram Moolenaar setlocal ei=all ve=all nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf 735d68071d8SBram Moolenaar endif 736f233048aSBram Moolenaar " vimballs should be in unix format 737f233048aSBram Moolenaar setlocal ff=unix 73825e2c9e3SBram Moolenaar" call Dret("SaveSettings") 73925e2c9e3SBram Moolenaarendfun 74025e2c9e3SBram Moolenaar 74125e2c9e3SBram Moolenaar" --------------------------------------------------------------------- 742f233048aSBram Moolenaar" vimball#RestoreSettings: {{{2 743f233048aSBram Moolenaarfun! vimball#RestoreSettings() 74425e2c9e3SBram Moolenaar" call Dfunc("RestoreSettings()") 74525e2c9e3SBram Moolenaar let @a = s:regakeep 74603413f44SBram Moolenaar if exists("+acd") 74725e2c9e3SBram Moolenaar let &acd = s:acdkeep 748d68071d8SBram Moolenaar endif 749e37d50a5SBram Moolenaar let &l:fen = s:fenkeep 75025e2c9e3SBram Moolenaar let &hidden = s:hidkeep 75125e2c9e3SBram Moolenaar let &ic = s:ickeep 752dd2a3cdaSBram Moolenaar let &lz = s:lzkeep 753143c38cdSBram Moolenaar let &pm = s:pmkeep 75425e2c9e3SBram Moolenaar let &report = s:repkeep 75525e2c9e3SBram Moolenaar let &ve = s:vekeep 756dd2a3cdaSBram Moolenaar let &ei = s:eikeep 757e37d50a5SBram Moolenaar let &l:ff = s:ffkeep 75825e2c9e3SBram Moolenaar if s:makeep[0] != 0 75925e2c9e3SBram Moolenaar " restore mark a 76025e2c9e3SBram Moolenaar" call Decho("restore mark-a: makeep=".string(makeep)) 76125e2c9e3SBram Moolenaar call setpos("'a",s:makeep) 76225e2c9e3SBram Moolenaar endif 76303413f44SBram Moolenaar if exists("+acd") 764f233048aSBram Moolenaar unlet s:acdkeep 765d68071d8SBram Moolenaar endif 766f233048aSBram Moolenaar unlet s:regakeep s:eikeep s:fenkeep s:hidkeep s:ickeep s:repkeep s:vekeep s:makeep s:lzkeep s:pmkeep s:ffkeep 76725e2c9e3SBram Moolenaar" call Dret("RestoreSettings") 76825e2c9e3SBram Moolenaarendfun 76925e2c9e3SBram Moolenaar 7706be7f873SBram Moolenaarlet &cpo = s:keepcpo 7716be7f873SBram Moolenaarunlet s:keepcpo 7726be7f873SBram Moolenaar 77325e2c9e3SBram Moolenaar" --------------------------------------------------------------------- 774eee697b7SBram Moolenaar" Modelines: {{{1 775eee697b7SBram Moolenaar" vim: fdm=marker 776