Robert Webb wrote:

> > > Five issues with omni-completion.
> > > 
> > > (1) How about adding an option to 'complete' to use omni-search?
> > > That way ^P and ^N can be used for everything.  If omni worked
> > > well, then I'd probably put it first in the list, even before ".".
> > 
> > Unfortunately that's very complicated, because, in general, omni
> > completion doesn't use the same pattern before the cursor.  Thus it
> > could change a different part of the already typed text.
> 
> Pity.  I'd really like to not think about how I want the word
> completed, and avoid two keystrokes.
> 
> How about this idea.  When 'o' is present in 'complete',
> omni-completion is used if "." or "->" is found before the identifier,
> otherwise a normal completion is done.  So if omni is used, then other
> completion types are not done.  This is actually even better I think
> as we should know what matches are possible in these cases.

This has a chicken-egg problem: You can't reliably know if there is
something to omni-complete without doing it.  "." and "->" only work for
C, other languages may work completely different.  And even for C, when
omni completion doesn't find anything I want local completion (e.g., to
find a word in a comment).

Anyway, I often want to chose between using omni-complete or not.  With
that 'o' in 'complete' that would not work.

> The problem I guess is that what I just said was C-specific.  The
> ftplugin scripts would probably have to dictate somehow whether to use
> omni-completion or not.  That is, if they recognise the context, they
> should take control, otherwise they let vim do its usual thing.  Is
> there some existing mechanism in ftplugins that makes this doable?
> 
> Btw, just noticed that omni-completion also doesn't work if there's a
> space between the "->" and the identifier.  This will turn up
> sometimes.  Ideally whitespace should be skipped, even if it means
> going back to a previous line.

This is to force people to write nice C code like I do. :-)

It's very well possible that the space was inserted to avoid including
that "->" in the completion, something unfinished.

> > You need to use the C style declaration, since omni completion works
> > for C
> > 
> >    struct Blah
> >    {
> >     float blab;
> >    };
> >    main()
> >    {
> >     struct Blah *b;
> >     b->bl        <---- Cursor at end of this line.
> >    }
> 
> Ah, OK, thanks.  I think most C compilers would accept "Blah *b"
> by the way, without the preceding "struct", but I notice that doesn't
> work.

I don't think that is official C code (C99 perhaps, but I don't like
that standard anyway).

> > > (4) Actually since I have other files here too, it wasn't the only
> > > completion, but it was interesting that the "Blah" completion came
> > > last in the list.  Why?  Would be great if completions from the
> > > current file were listed first, followed by completions from other
> > > files with same name but different extension (usually header
> > > files), followed by matches from any other files.
> > 
> > The completions are listed alphabetically sorted.  I'm not sure if
> > using another method is that much better, there would be a jump from
> > "static" to global matches at some point, that might come unexpected
> > if you thought it was alphabetical.
> 
> Ideally you want to get the matches in the order from most to least
> likely (likely to be the one you want, that is).  Alphabetical is
> irrelevant here.  Matches from the current file are by far most
> likely, then matches from the matching header file, then from other
> files.  If you are using completion to search through more than about
> 20 matches, then likely you will cancel and just type in the word
> manually as it's really not saving you any time.

I don't agree.  What is "most likely" is hard to decide, it depends on
what you are doing.  It's not unusual to use lots of library functions
and only a few local things.  And for the local things (e.g., variable
names) non-omni completion often works better (they are not in the tags
file).

Also, when using the longest match alphabetical is probably better.

> Normal completion with ^P/^N is not alphabetical.  It is in order of
> proximity within the file.

Yes, and that's quite arbitrary for words that are further away.  But
it's good to have this for words very close, ones that you can see.

> If you think alphabetical might be a useful alternative, then it could
> be an option in 'completeopt'.

Ah, yes, a chance for another option!

> > You can remove "preview" from 'completeopt'.  It's there by default,
> > because it's easy to remove, while it's hard to discover that this
> > possiblity exists.
> 
> It's also hard to discover what it is and how to get rid of it, and as
> I said, it just shows info that was already shown on the completion
> menu anyway.  I find it odd that it hangs around after the completion
> is finished too.

That's so that you can see function arguments while you are typing them.

-- 
A)bort, R)etry, P)lease don't bother me again

 /// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

Reply via email to