1
0
forked from aniani/vim

patch 9.1.1224: 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

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
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-18 22:14:34 +01:00
committed by Christian Brabandt
parent 11ab02c819
commit e08f10a55c
19 changed files with 324 additions and 83 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,8 +2373,8 @@ do_one_cmd(
goto doend;
}
#endif
if (valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
&& !IS_USER_CMDIDX(ea.cmdidx))))
if (valid_yank_reg(*ea.arg, (!IS_USER_CMDIDX(ea.cmdidx)
&& ea.cmdidx != CMD_put && ea.cmdidx != CMD_iput)))
{
ea.regname = *ea.arg++;
#ifdef FEAT_EVAL
@@ -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".
*/