On Sat, 24 Jun 2006 at 7:12pm, Marc Weber wrote:
> Hi.
> I'm tired of writing things like
> getBlahFoo
> using getB<c-x><c-t> is fine, but why type "et"?
>
> That's why I've written this complete function:
> Now you can type BF<m-x> to expand it to getBlahFoo
> it uses the created regexpr B.*F.* to filter all tags
> ============= start
============================================================
>
> set completefunc=CompleteWithSimpleRegex
> inoremap <m-x> <c-r>call DoCompleteRegex()<cr>
>
>
> " eg use mn<mapping> to match main
> " or CF<mappnig to match CompleteFunction
> fun! CompleteWithSimpleRegex(findstart, base)
> if a:findstart
> " locate the start of the word
> let line = getline('.')
> let start = col('.') - 1
> while start > 0 && line[start - 1] =~ '\a'
> let start -= 1
> endwhile
> return start
> else
> let pattern = substitute(a:base,'\(.\)','\1.*','')
> let list = taglist(pattern)
> let res = []
> for p in list
> call add(res, p['name'])
> endfor
> let g:res=res
> return res
> endif
> endfun
> ============= end
==============================================================
>
> Now I'd like to set the complete func only temporarely because I might
> define another later.
>
> I did try this to store the complete func and restore it after
> <c-x><c-u>
> fun DoCompleteRegex()
> let cf = &completefunc
> set completefunc=CompleteWithSimpleRegex
> normal <c-x><c-u>
> set completefunc=cf
> return ""
> endfun
> It didn't work.
>
> How would you do this?
>
> Marc
I don't know why the normal command wouldn't work in your case, but you
could try to set the completion results immediately by calling the
complete() function, instead of fiddling with 'completefunc'.
--
HTH,
Hari
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com