On Fri, Oct 27, 2006 at 04:46:02PM +0100, A. S. Budden wrote:
> Dear all,
> 
> I've recently started using the CleverTab function below, modified from
> the bottom of the comments page on tip 102.  This is brilliant from my
> point of view:
> 
> - tab produces tabs at the start of the line for indenting*;
> - tab shows the longest unique option in the omnicomplete list
>  when using omnicompletion;
> - tab cycles through the list of completions if the popup menu is
>  visible but omnicompletion isn't used;
> - otherwise, it returns a tab.
> 
> What I'd like to do is change the last one of those so that it puts in
> enough spaces to reach the next tabstop so that good formatting is
> maintained regardless of the tabstop setting on a users editor.
> 
> However, I can't figure out how to achieve this.
> 
> The 'expandtab' option is no use as it will change the tabs at the start
> of the line (used for indentation) to spaces, which will result in a
> really badly formatted piece of source code (as it is edited by several
> people who all like different tab stops)*.  Similarly, replacing "\<Tab>"
> in the last return line with "    " is no use as it will always insert
> four spaces, even if we're halfway through a tab stop (it's also not
> very flexible for different tabstop settings).
> 
> Can anyone offer any suggestions for this?
[snip]

     The 'expandtab' option does not affect existing tabs in the file
(unless you :retab) so it should be safe to have your function reset/set
it depending on whether you are at the start of the line or not.  I have
not tested this.

     For another approach, pretty much what you suggested, look at the
VarTab() function in foo.vim, my file of example vim functions:
http://www.vim.org/script.php?script_id=72
This function returns a calculated number of spaces, and it should be
pretty easy to use the same idea for your function.  (It just takes a
little :while loop.)

HTH                                     --Benji Fisher

Reply via email to