On Tue, 20 Jun 2006 at 10:47am, Bram Moolenaar wrote:

>
> Hari Krishna Dara wrote:
>
> > > > I have a command with custom completion function that employs the
:redir
> > > > mechanism to determines the matches. This used to work fine in Vim6.3,
> > > > but is broken in Vim7.0. I don't see any sandbox restrictions that
could
> > > > apply in this case, but even if they do, the command for which I am
> > > > redirecting the output itself is very simple, it is just an :echo on a
> > > > simple string, something like this:
> > > >
> > > > :Echo delete
> > > >
> > > > and the command Echo is defined as
> > > >
> > > > :command! -complete=file -nargs=* Echo :echo <q-args>
> > > >
> > > > Is this a bug in Vim7 or some change that is not backwards compatible?
> > > > What would be the change that caused this to break?
> > >
> > > You don't give enough information to write a meaningful reply.
> >
> > Sorry, I thought my description was complete enough, but anyway, here I
> > extracted the code that breaks.
> >
> > command! -complete=file -nargs=* GUDebugEcho :echo <q-args>
> > function! UserFileExpand(fileArgs)
> >     return substitute(GetVimCmdOutput('GUDebugEcho ' . a:fileArgs),
> > '^\_s\+\|\_s\+$', '', 'g')
> > endfunction
> >
> > If UserFileExpand() is called from custom completion function, it no
> > longer captures any output (this works fine in 6.3), but it works fine
> > if you call from command line or scripts.

As Eric mentioned, the part that is "broken" is this and see below for
the example correct/expected and incorrect/unexpected behavior. Please
let me know if you need further clarification.

-- 
Thanks,
Hari

> >
> > This doesn't work (this is just a dummy command to show the epansion
> > doesn't return anything, the input() prompt shows that expansion didn't
> > work):
> > :TT abc<Tab>
> >
> > Where TT is defined as:
> > command! -nargs=* -complete=custom,CustComplete TT :echo <q-args>
> > function! CustComplete(ArgLead, CmdLine, CursorPos)
> >   let ArgLead = UserFileExpand(a:ArgLead)
> >   call input('ArgLead: '.a:ArgLead.' expanded: ' . ArgLead)
> >   return ArgLead
> > endfunction
> >
> > This works:
> > :echo UserFileExpand('abc')
> >
> > And this too works:
> > echo CustComplete('abc', '', 0)
> >
> > The GetVimCmdOutput() is simply a wrapper around :redir and here is how
> > it is defined:
> >
> > function! GetVimCmdOutput(cmd)
> >   let v:errmsg = ''
> >   let output = ''
> >   let _z = @z
> >   let _shortmess = &shortmess
> >   try
> >     set shortmess=
> >     redir @z
> >     exec a:cmd
> >   catch /.*/
> >     let v:errmsg = substitute(v:exception, '^[^:]\+:', '', '')
> >   finally
> >     redir END
> >     let &shortmess = _shortmess
> >     if v:errmsg == ''
> >       let output = @z
> >     endif
> >     let @z = _z
> >   endtry
> >   return output
> > endfunction
>
> Well, you do give more information, but you have not explained what you
> mean with "is broken".  What error message do you get?  You may have to
> set the 'verbose' option to see something.  You can change the commands
> to figure out where it goes wrong.
>
>

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

Reply via email to