0
0
mirror of https://github.com/vim/vim.git synced 2025-09-01 21:03:39 -04:00

patch 7.4.700

Problem:    Fold can't be opened after ":move". (Ein Brown)
Solution:   Delete the folding information and update it afterwards.
            (Christian Brabandt)
This commit is contained in:
Bram Moolenaar 2015-04-15 12:43:50 +02:00
parent 05b20fb14e
commit d5f6933d5c
5 changed files with 35 additions and 2 deletions

View File

@ -741,6 +741,16 @@ do_move(line1, line2, dest)
linenr_T extra; /* Num lines added before line1 */
linenr_T num_lines; /* Num lines moved */
linenr_T last_line; /* Last line in file after adding new text */
#ifdef FEAT_FOLDING
int isFolded;
/* Moving lines seems to corrupt the folds, delete folding info now
* and recreate it when finished. Don't do this for manual folding, it
* would delete all folds. */
isFolded = hasAnyFolding(curwin) && !foldmethodIsManual(curwin);
if (isFolded)
deleteFoldRecurse(&curwin->w_folds);
#endif
if (dest >= line1 && dest < line2)
{
@ -839,6 +849,12 @@ do_move(line1, line2, dest)
else
changed_lines(dest + 1, 0, line1 + num_lines, 0L);
#ifdef FEAT_FOLDING
/* recreate folds */
if (isFolded)
foldUpdateAll(curwin);
#endif
return OK;
}

View File

@ -847,8 +847,8 @@ foldUpdate(wp, top, bot)
fold_T *fp;
/* Mark all folds from top to bot as maybe-small. */
(void)foldFind(&curwin->w_folds, top, &fp);
while (fp < (fold_T *)curwin->w_folds.ga_data + curwin->w_folds.ga_len
(void)foldFind(&wp->w_folds, top, &fp);
while (fp < (fold_T *)wp->w_folds.ga_data + wp->w_folds.ga_len
&& fp->fd_top < bot)
{
fp->fd_small = MAYBE;

View File

@ -63,6 +63,16 @@ endfun
:call append("$", foldlevel("."))
:/^last/+1,$w! test.out
:delfun Flvl
:new
iTest fdm=indent and :move bug END
line2
Test fdm=indent START
line3
line4
:set fdm=indent
:1m1
2jzc:m0
:%w >> test.out
:qa!
ENDTEST

View File

@ -16,3 +16,8 @@ expr 2
1
2
0
Test fdm=indent START
line3
line4
Test fdm=indent and :move bug END
line2

View File

@ -741,6 +741,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
700,
/**/
699,
/**/