On 1 May 2015, Rich <for...@artfulrobot.uk> wrote:
> Hi
>
> You don't need to use any plugin to test this.
>
> If you want proof that foldexpr is used for autocomplete, try this:
> 
> let g:c = 0
> function! Myfoldexpr()
>   let g:c = 1 + g:c
>   return '='
> endfunction
> 
> Then make a file with 10 lines.
> :set fdm=expr
> :set foldexpr=Myfoldexpr()
> :echo g:c
> 
> It will say 11.
> zx
> :echo g:c
> it will say 22
> 
> Now edit a new line and press <C-X>L
> :echo g:c
> it now says 33 or 34
> 

> Now if you make a file with 100 lines in it, each with a single
> character. press <C-X>L and have a look at the counter, it's up to
> nearer 150.
>
> Now the fun part.  Make your file 100 lines long, each with 10
> characters in it.Start a new line and <C-X>L then escape and look at
> the counter.  Mine's at 7,437 executions!
[...]

    Right, it's actually worse than that: the entire folding is
redone at every key press. :) If you feel particularly adventurous
and you aren't easily upset by tiny details like segfaults, you might
try the patch below.  It's a naive attempt to alleviate the problem
for autocomplete.  It's definitely not the right fix.  But I don't
understand the code well enough to come up with a better one, so I'll
leave finding the real solution to the grown-ups.

    /lcd


diff --git a/src/edit.c b/src/edit.c
--- a/src/edit.c
+++ b/src/edit.c
@@ -673,12 +673,15 @@
 #endif
 
 #ifdef FEAT_FOLDING
-       /* Open fold at the cursor line, according to 'foldopen'. */
-       if (fdo_flags & FDO_INSERT)
-           foldOpenCursor();
-       /* Close folds where the cursor isn't, according to 'foldclose' */
-       if (!char_avail())
-           foldCheckClose();
+       if (!compl_started || !pum_wanted())
+       {
+           /* Open fold at the cursor line, according to 'foldopen'. */
+           if (fdo_flags & FDO_INSERT)
+               foldOpenCursor();
+           /* Close folds where the cursor isn't, according to 'foldclose' */
+           if (!char_avail())
+               foldCheckClose();
+       }
 #endif
 
        /*

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui