0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 9.0.0861: solution for "!!sort" in closed fold is not optimal

Problem:    Solution for "!!sort" in closed fold is not optimal.
Solution:   Use a different range instead of the subtle difference in handling
            a range with an offset. (issue #11487)
This commit is contained in:
Bram Moolenaar
2022-11-11 22:58:36 +00:00
parent a20be06f97
commit 9954dc39ea
5 changed files with 114 additions and 21 deletions

View File

@@ -3333,14 +3333,32 @@ op_colon(oparg_T *oap)
stuffcharReadbuff('.');
else
stuffnumReadbuff((long)oap->start.lnum);
if (oap->end.lnum != oap->start.lnum)
#ifdef FEAT_FOLDING
// When using !! on a closed fold the range ".!" works best to operate
// on, it will be made the whole closed fold later.
linenr_T endOfStartFold = oap->start.lnum;
(void)hasFolding(oap->start.lnum, NULL, &endOfStartFold);
#endif
if (oap->end.lnum != oap->start.lnum
#ifdef FEAT_FOLDING
&& oap->end.lnum != endOfStartFold
#endif
)
{
// Make it a range with the end line.
stuffcharReadbuff(',');
if (oap->end.lnum == curwin->w_cursor.lnum)
stuffcharReadbuff('.');
else if (oap->end.lnum == curbuf->b_ml.ml_line_count)
stuffcharReadbuff('$');
else if (oap->start.lnum == curwin->w_cursor.lnum)
else if (oap->start.lnum == curwin->w_cursor.lnum
#ifdef FEAT_FOLDING
// do not use ".+number" for a closed fold, it would count
// folded lines twice
&& !hasFolding(oap->end.lnum, NULL, NULL)
#endif
)
{
stuffReadbuff((char_u *)".+");
stuffnumReadbuff((long)oap->line_count - 1);