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>
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 80ec8a1..341cc38 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -231,6 +231,7 @@
#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 @@
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++;
@@ -8521,6 +8522,25 @@
}
/*
+ * ":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".
*/
static void