vimsuite/vimfiles/plugin/vgrepsup.vim
2007-11-05 10:58:58 +00:00

77 lines
1.7 KiB
VimL

" Author: Michael Geddes ( vimmer at frog.wheelycreek.net )
"
" Created for zimnyx on IRC
" Version:0.2
"
" Do a global search replace on a directory.
"
"
" Copyright: Copyright me. Feel free to use, share, modify & distribute the
" script but acknowledge me please.
"
" vim: ts=2 sw=2 et
fun! GlobSearchReplace( fileglob, sub, rep, flag)
let v:errmsg=''
exe 'vimgrep /'.escape(a:sub,'/').'/ '.a:fileglob
if v:errmsg != '' | return 0 | endif
let countup=0
let more=1
while 1
silent exe 's/'.escape(a:sub, '/').'/'.escape(a:rep,'/').'/'.a:flag
let countup+=1
try
silent cnext
catch
if v:exception !~ 'E553:' | echoerr v:exception | endif
break
endtry
endwhile
return countup
endfun
fun! s:CallGlobReplace(str)
if strlen(a:str) == 0
echoerr 'Usage: /sub/rep/flags files'
return 0
endif
let firstch= a:str[0]
let argidx=0
let arg0=''
let arg1=''
let argflags=''
let argfileglob=''
let idx=1
let str=a:str
while idx < strlen(str)
let ch=str[idx]
if ch=='\' && idx+1 < strlen(str) && str[idx+1] == firstch
let str=str[0:idx].str[idx+1:]
elseif ch==firstch
let arg{argidx}=str[1:idx-1]
let argidx+=1
let str=str[idx : ]
let idx=0
if argidx==2
break
endif
endif
let idx+=1
endwhile
if argidx == 2
echo ' argidx=2'
let idx+=1
while idx < strlen(str)
if str[idx]=~'\s'
let idx+=1
break
endif
let argflags=argflags.str[idx]
let idx+=1
endwhile
let argfileglob=str[idx : ]
endif
call GlobSearchReplace( argfileglob, arg0, arg1, argflags)
endfun
com! -nargs=1 Gsub :call s:CallGlobReplace(<q-args>)