mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 14:08:32 +00:00
vim-patch:8.2.4881: "P" in Visual mode still changes some registers (#18445)
Problem: "P" in Visual mode still changes some registers.
Solution: Make "P" in Visual mode not change any register. (Shougo
Matsushita, closes vim/vim#10349)
509142ab7a
This commit is contained in:
@@ -7108,7 +7108,7 @@ static void nv_put_opt(cmdarg_T *cap, bool fix_indent)
|
||||
// overwrites if the old contents is being put.
|
||||
was_visual = true;
|
||||
regname = cap->oap->regname;
|
||||
bool save_unnamed = cap->cmdchar == 'P';
|
||||
bool keep_registers = cap->cmdchar == 'P';
|
||||
// '+' and '*' could be the same selection
|
||||
bool clipoverwrite = (regname == '+' || regname == '*') && (cb_flags & CB_UNNAMEDMASK);
|
||||
if (regname == 0 || regname == '"' || clipoverwrite
|
||||
@@ -7123,23 +7123,15 @@ static void nv_put_opt(cmdarg_T *cap, bool fix_indent)
|
||||
// do_put(), which requires the visual selection to still be active.
|
||||
if (!VIsual_active || VIsual_mode == 'V' || regname != '.') {
|
||||
// Now delete the selected text. Avoid messages here.
|
||||
yankreg_T *old_y_previous;
|
||||
if (save_unnamed) {
|
||||
old_y_previous = get_y_previous();
|
||||
}
|
||||
cap->cmdchar = 'd';
|
||||
cap->nchar = NUL;
|
||||
cap->oap->regname = NUL;
|
||||
cap->oap->regname = keep_registers ? '_' : NUL;
|
||||
msg_silent++;
|
||||
nv_operator(cap);
|
||||
do_pending_operator(cap, 0, false);
|
||||
empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
|
||||
msg_silent--;
|
||||
|
||||
if (save_unnamed) {
|
||||
set_y_previous(old_y_previous);
|
||||
}
|
||||
|
||||
// delete PUT_LINE_BACKWARD;
|
||||
cap->oap->regname = regname;
|
||||
}
|
||||
|
Reference in New Issue
Block a user