# HG changeset patch # User Bram Moolenaar # Date 1587754804 -7200 # Node ID fadb7f84beff60e0172c51d74784217312c2267a # Parent fe776cc8b8710491f5f457b124d484d84b85073f patch 8.2.0629: setting a boolean option to v:false does not work Commit: https://github.com/vim/vim/commit/65d032c779a43b767497e15e6a32d04a6a8fa65d Author: Bram Moolenaar Date: Fri Apr 24 20:57:01 2020 +0200 patch 8.2.0629: setting a boolean option to v:false does not work Problem: Setting a boolean option to v:false does not work. Solution: Do not use the string representation of the value. (Christian Brabandt, closes #5974) diff --git a/src/evalvars.c b/src/evalvars.c --- a/src/evalvars.c +++ b/src/evalvars.c @@ -1251,13 +1251,15 @@ ex_let_one( int opt_type; long numval; char_u *stringval = NULL; - char_u *s; + char_u *s = NULL; c1 = *p; *p = NUL; n = (long)tv_get_number(tv); - s = tv_get_string_chk(tv); // != NULL if number or string + // avoid setting a string option to the text "v:false" or similar. + if (tv->v_type != VAR_BOOL && tv->v_type != VAR_SPECIAL) + s = tv_get_string_chk(tv); // != NULL if number or string if (s != NULL && op != NULL && *op != '=') { opt_type = get_option_value(arg, &numval, @@ -1289,7 +1291,8 @@ ex_let_one( } } } - if (s != NULL) + if (s != NULL || tv->v_type == VAR_BOOL + || tv->v_type == VAR_SPECIAL) { set_option_value(arg, n, s, opt_flags); arg_end = p; diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -899,4 +899,18 @@ func Test_opt_num_op() set shiftwidth& endfunc +" Test for setting option values using v:false and v:true +func Test_opt_boolean() + set number& + set number + call assert_equal(1, &nu) + set nonu + call assert_equal(0, &nu) + let &nu = v:true + call assert_equal(1, &nu) + let &nu = v:false + call assert_equal(0, &nu) + set number& +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 629, +/**/ 628, /**/ 627,