From 1dba570e63edcc69d6661bdcb9857def8bb18039 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 7 Dec 2023 12:04:02 +0800 Subject: fix(inccommand): save and restore '[ and '] marks (#26442) Undoing a change moves '[ and '] marks, so it is necessary to save and restore them. --- src/nvim/ex_getln.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src') diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index f31f8fec55..14d230331a 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -152,6 +152,8 @@ typedef struct cmdpreview_buf_info { buf_T *buf; OptInt save_b_p_ul; int save_b_changed; + pos_T save_b_op_start; + pos_T save_b_op_end; varnumber_T save_changedtick; CpUndoInfo undo_info; } CpBufInfo; @@ -2360,6 +2362,8 @@ static void cmdpreview_prepare(CpInfo *cpinfo) cp_bufinfo.buf = buf; cp_bufinfo.save_b_p_ul = buf->b_p_ul; cp_bufinfo.save_b_changed = buf->b_changed; + cp_bufinfo.save_b_op_start = buf->b_op_start; + cp_bufinfo.save_b_op_end = buf->b_op_end; cp_bufinfo.save_changedtick = buf_get_changedtick(buf); cmdpreview_save_undo(&cp_bufinfo.undo_info, buf); kv_push(cpinfo->buf_info, cp_bufinfo); @@ -2438,6 +2442,9 @@ static void cmdpreview_restore_state(CpInfo *cpinfo) u_blockfree(buf); cmdpreview_restore_undo(&cp_bufinfo.undo_info, buf); + buf->b_op_start = cp_bufinfo.save_b_op_start; + buf->b_op_end = cp_bufinfo.save_b_op_end; + if (cp_bufinfo.save_changedtick != buf_get_changedtick(buf)) { buf_set_changedtick(buf, cp_bufinfo.save_changedtick); } -- cgit