diff options
| -rw-r--r-- | src/nvim/eval.c | 8 | ||||
| -rw-r--r-- | src/nvim/testdir/test_options.vim | 15 | 
2 files changed, 21 insertions, 2 deletions
| diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 250201c3fe..66cd0e09c6 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -1838,12 +1838,15 @@ static char_u *ex_let_one(char_u *arg, typval_T *const tv,        int opt_type;        long numval;        char *stringval = NULL; +      const char *s = NULL;        const char c1 = *p;        *p = NUL;        varnumber_T n = tv_get_number(tv); -      const char *s = tv_get_string_chk(tv);  // != NULL if number or string. +      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, (char_u **)&stringval,                                      opt_flags); @@ -1869,7 +1872,8 @@ static char_u *ex_let_one(char_u *arg, typval_T *const tv,            }          }        } -      if (s != NULL) { +      if (s != NULL || tv->v_type == VAR_BOOL +          || tv->v_type == VAR_SPECIAL) {          set_option_value((const char *)arg, n, s, opt_flags);          arg_end = (char_u *)p;        } diff --git a/src/nvim/testdir/test_options.vim b/src/nvim/testdir/test_options.vim index 400af33c58..04a5c62f66 100644 --- a/src/nvim/testdir/test_options.vim +++ b/src/nvim/testdir/test_options.vim @@ -561,3 +561,18 @@ func Test_visualbell()    set novisualbell    set belloff=all  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 + | 
