patch 9.1.1213: cannot :put while keeping indent

Problem:  cannot :put while keeping indent
          (Peter Aronoff)
Solution: add the :iput ex command (64-bitman)

fixes: #16225
closes: #16886

Signed-off-by: 64-bitman <60551350+64-bitman@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
64-bitman
2025-03-16 21:10:47 +01:00
committed by Christian Brabandt
parent 7ceca3eb00
commit 250739d442
18 changed files with 268 additions and 81 deletions

View File

@ -231,6 +231,7 @@ static void ex_winpos(exarg_T *eap);
#endif
static void ex_operators(exarg_T *eap);
static void ex_put(exarg_T *eap);
static void ex_iput(exarg_T *eap);
static void ex_copymove(exarg_T *eap);
static void ex_submagic(exarg_T *eap);
static void ex_join(exarg_T *eap);
@ -2372,7 +2373,7 @@ do_one_cmd(
goto doend;
}
#endif
if (valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
if (valid_yank_reg(*ea.arg, ((ea.cmdidx != CMD_put && ea.cmdidx != CMD_iput)
&& !IS_USER_CMDIDX(ea.cmdidx))))
{
ea.regname = *ea.arg++;
@ -8520,6 +8521,25 @@ ex_put(exarg_T *eap)
PUT_LINE|PUT_CURSLINE);
}
/*
* ":iput".
*/
static void
ex_iput(exarg_T *eap)
{
// ":0iput" works like ":1iput!".
if (eap->line2 == 0)
{
eap->line2 = 1;
eap->forceit = TRUE;
}
curwin->w_cursor.lnum = eap->line2;
check_cursor_col();
do_put(eap->regname, NULL, eap->forceit ? BACKWARD : FORWARD, 1L,
PUT_LINE|PUT_CURSLINE
|PUT_FIXINDENT);
}
/*
* Handle ":copy" and ":move".
*/