summaryrefslogtreecommitdiffstats
path: root/src/ex_cmds.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ex_cmds.c')
-rw-r--r--src/ex_cmds.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index 978d516f7d..1abda7423b 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -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;
}