patch 9.1.0832: :set doesn't work for 'cot' and 'bkc' after :setlocal
Commit:
https://github.com/vim/vim/commit/46dcd84d242db6b053cb5b777c896cede9ad9b27
Author: zeertzjq <[email protected]>
Date: Sun Nov 3 09:10:50 2024 +0100
patch 9.1.0832: :set doesn't work for 'cot' and 'bkc' after :setlocal
Problem: :set doesn't work for 'cot' and 'bkc' after :setlocal.
Solution: clear the local flags when using :set (zeertzjq).
closes: #15981
Signed-off-by: zeertzjq <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/optionstr.c b/src/optionstr.c
index 0554c0eb2..7c589e917 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -1146,6 +1146,9 @@ did_set_backupcopy(optset_T *args)
bkc = curbuf->b_p_bkc;
flags = &curbuf->b_bkc_flags;
}
+ else if (!(args->os_flags & OPT_GLOBAL))
+ // When using :set, clear the local flags.
+ curbuf->b_bkc_flags = 0;
if ((args->os_flags & OPT_LOCAL) && *bkc == NUL)
// make the local value empty: use the global value
@@ -1619,6 +1622,9 @@ did_set_completeopt(optset_T *args UNUSED)
cot = curbuf->b_p_cot;
flags = &curbuf->b_cot_flags;
}
+ else if (!(args->os_flags & OPT_GLOBAL))
+ // When using :set, clear the local flags.
+ curbuf->b_cot_flags = 0;
if (check_opt_strings(cot, p_cot_values, TRUE) != OK)
return e_invalid_argument;
diff --git a/src/testdir/test_ins_complete.vim
b/src/testdir/test_ins_complete.vim
index df254847e..8b478a190 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -875,6 +875,46 @@ func Test_completeopt_buffer_local()
call assert_equal('menu', &completeopt)
call assert_equal('menu', &g:completeopt)
+ new | only
+ call setline(1, ['foofoo', 'foobar', 'foobaz', ''])
+ set completeopt&
+ setlocal completeopt=menu,fuzzy,noinsert
+ setglobal completeopt=menu,longest
+ call assert_equal('menu,fuzzy,noinsert', &completeopt)
+ call assert_equal('menu,fuzzy,noinsert', &l:completeopt)
+ call assert_equal('menu,longest', &g:completeopt)
+ call feedkeys("Gccf\<C-X>\<C-N>bz\<C-Y>", 'tnix')
+ call assert_equal('foobaz', getline('.'))
+ setlocal bufhidden=wipe
+ new | only!
+ call setline(1, ['foofoo', 'foobar', 'foobaz', ''])
+ call assert_equal('menu,longest', &completeopt)
+ call assert_equal('menu,longest', &g:completeopt)
+ call assert_equal('', &l:completeopt)
+ call feedkeys("Gccf\<C-X>\<C-N>\<C-X>\<C-Z>", 'tnix')
+ call assert_equal('foo', getline('.'))
+ bwipe!
+
+ new | only
+ call setline(1, ['foofoo', 'foobar', 'foobaz', ''])
+ set completeopt&
+ setlocal completeopt=menu,fuzzy,noinsert
+ set completeopt=menu,longest
+ call assert_equal('menu,longest', &completeopt)
+ call assert_equal('menu,longest', &g:completeopt)
+ call assert_equal('', &l:completeopt)
+ call feedkeys("Gccf\<C-X>\<C-N>\<C-X>\<C-Z>", 'tnix')
+ call assert_equal('foo', getline('.'))
+ setlocal bufhidden=wipe
+ new | only!
+ call setline(1, ['foofoo', 'foobar', 'foobaz', ''])
+ call assert_equal('menu,longest', &completeopt)
+ call assert_equal('menu,longest', &g:completeopt)
+ call assert_equal('', &l:completeopt)
+ call feedkeys("Gccf\<C-X>\<C-N>\<C-X>\<C-Z>", 'tnix')
+ call assert_equal('foo', getline('.'))
+ bwipe!
+
set completeopt&
endfunc
diff --git a/src/version.c b/src/version.c
index 3e8bfbd7b..e46258572 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 832,
/**/
831,
/**/
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1t7VlN-00APpi-4d%40256bit.org.