Mercurial > vim
changeset 25883:826c36b4640b v8.2.3475
patch 8.2.3475: expression register set by not executed put command
Commit: https://github.com/vim/vim/commit/08d7b1c82866a61b61a55e55b6c190dba04e54ea
Author: kuuote <znmxodq1@gmail.com>
Date: Mon Oct 4 22:17:36 2021 +0100
patch 8.2.3475: expression register set by not executed put command
Problem: Expression register set by not executed put command.
Solution: Do not set the register if the command is skipped. (closes https://github.com/vim/vim/issues/8909)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 04 Oct 2021 23:30:03 +0200 |
parents | c7830dd110a7 |
children | 25fbd356bb09 |
files | src/ex_docmd.c src/testdir/test_excmd.vim src/version.c |
diffstat | 3 files changed, 15 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -2382,9 +2382,12 @@ do_one_cmd( // for '=' register: accept the rest of the line as an expression if (ea.arg[-1] == '=' && ea.arg[0] != NUL) { - set_expr_line(vim_strsave(ea.arg), &ea); + if (!ea.skip) + { + set_expr_line(vim_strsave(ea.arg), &ea); + did_set_expr_line = TRUE; + } ea.arg += STRLEN(ea.arg); - did_set_expr_line = TRUE; } #endif ea.arg = skipwhite(ea.arg);
--- a/src/testdir/test_excmd.vim +++ b/src/testdir/test_excmd.vim @@ -647,4 +647,12 @@ func Test_command_not_implemented_E319() endif endfunc +func Test_not_break_expression_register() + call setreg('=', '1+1') + if 0 + put =1 + endif + call assert_equal('1+1', getreg('=', 1)) +endfunc + " vim: shiftwidth=2 sts=2 expandtab