# HG changeset patch # User Bram Moolenaar # Date 1644673505 -3600 # Node ID df84fac1e9a4be64c047cfe4fa6bdd29227e6664 # Parent 21654b0c1a95cf8b028c8c2d930fa56e4b908e65 patch 8.2.4357: sticky command modifiers are too sticky Commit: https://github.com/vim/vim/commit/2a9b62dfa2fb91a6ede9cb4d146ca47a1db31254 Author: Bram Moolenaar Date: Sat Feb 12 13:30:17 2022 +0000 patch 8.2.4357: sticky command modifiers are too sticky Problem: sticky command modifiers are too sticky. Solution: Do not apply command modifiers to a sourced script. (closes https://github.com/vim/vim/issues/9751) diff --git a/src/scriptfile.c b/src/scriptfile.c --- a/src/scriptfile.c +++ b/src/scriptfile.c @@ -1254,6 +1254,7 @@ do_source( #ifdef FEAT_PROFILE proftime_T wait_start; #endif + int save_sticky_cmdmod_flags = sticky_cmdmod_flags; int trigger_source_post = FALSE; ESTACK_CHECK_DECLARATION @@ -1394,6 +1395,9 @@ do_source( time_push(&tv_rel, &tv_start); #endif + // "legacy" does not apply to commands in the script + sticky_cmdmod_flags = 0; + save_current_sctx = current_sctx; current_sctx.sc_version = 1; // default script version @@ -1618,6 +1622,7 @@ almosttheend: theend: vim_free(fname_exp); + sticky_cmdmod_flags = save_sticky_cmdmod_flags; #ifdef FEAT_EVAL estack_compiling = save_estack_compiling; #endif diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim --- a/src/testdir/test_vim9_cmd.vim +++ b/src/testdir/test_vim9_cmd.vim @@ -106,6 +106,18 @@ def Test_cmdmod_execute() unlet b:undo unlet g:undone unlet g:undtwo + + # "legacy" does not apply to a loaded script + lines =<< trim END + vim9script + export var exported = 'x' + END + writefile(lines, 'Xvim9import.vim') + lines =<< trim END + legacy exe "import './Xvim9import.vim'" + END + v9.CheckScriptSuccess(lines) + delete('Xvim9import.vim') enddef def Test_edit_wildcards() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4357, +/**/ 4356, /**/ 4355,