diff options
Diffstat (limited to 'src/nvim/ex_cmds2.c')
-rw-r--r-- | src/nvim/ex_cmds2.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index 3120868350..dacdb27b08 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -447,21 +447,24 @@ void ex_listdo(exarg_T *eap) if (curwin->w_p_wfb) { if ((eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) && !eap->forceit) { // Disallow :ldo if 'winfixbuf' is applied - semsg("%s", e_winfixbuf_cannot_go_to_buffer); + emsg(_(e_winfixbuf_cannot_go_to_buffer)); return; } - if (win_valid(prevwin)) { - // Change the current window to another because 'winfixbuf' is enabled - curwin = prevwin; - } else { + if (win_valid(prevwin) && !prevwin->w_p_wfb) { + // 'winfixbuf' is set; attempt to change to a window without it. + win_goto(prevwin); + } + if (curwin->w_p_wfb) { // Split the window, which will be 'nowinfixbuf', and set curwin to that - exarg_T new_eap = { - .cmdidx = CMD_split, - .cmd = "split", - .arg = "", - }; - ex_splitview(&new_eap); + win_split(0, 0); + + if (curwin->w_p_wfb) { + // Autocommands set 'winfixbuf' or sent us to another window + // with it set. Give up. + emsg(_(e_winfixbuf_cannot_go_to_buffer)); + return; + } } } |