runtime(vim): Update base-syntax and generator, only match valid predefined variables

- Only match valid predefined and option variables.
- Match scope dictionaries.
- Highlight scope prefixed variables as a scope dictionary accessor. The
  vimVarScope syntax group can be linked to vimVar to disable this.
- Include support for Neovim-only predefined and option variables.

Temporary collateral damage - scope dictionaries match instead of keys
in dictionary literals.

closes: #16727

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/syntax/testdir/input/vim_variables.vim b/runtime/syntax/testdir/input/vim_variables.vim
index af02fa8..da9e409 100644
--- a/runtime/syntax/testdir/input/vim_variables.vim
+++ b/runtime/syntax/testdir/input/vim_variables.vim
@@ -31,8 +31,8 @@
 let b:foo[1:] = expr
 let b:foo[:] = expr
 
-let bfoo["key"] = expr
-let bfoo['key'] = expr
+let b:foo["key"] = expr
+let b:foo['key'] = expr
 
 let b:foo += expr
 let b:foo -= expr
@@ -102,25 +102,25 @@
 let t:foo .= expr
 let t:foo ..= expr
 
-let v:foo = expr
+let v:true = expr
 
-let v:foo[0] = expr
+let v:true[0] = expr
 
-let v:foo[1:2] = expr
-let v:foo[:2] = expr
-let v:foo[1:] = expr
-let v:foo[:] = expr
+let v:true[1:2] = expr
+let v:true[:2] = expr
+let v:true[1:] = expr
+let v:true[:] = expr
 
-let v:foo["key"] = expr
-let v:foo['key'] = expr
+let v:true["key"] = expr
+let v:true['key'] = expr
 
-let v:foo += expr
-let v:foo -= expr
-let v:foo *= expr
-let v:foo /= expr
-let v:foo %= expr
-let v:foo .= expr
-let v:foo ..= expr
+let v:true += expr
+let v:true -= expr
+let v:true *= expr
+let v:true /= expr
+let v:true %= expr
+let v:true .= expr
+let v:true ..= expr
 
 let w:foo = expr
 
@@ -150,38 +150,38 @@
 let @f .= expr
 let @f ..= expr
 
-let &foo = expr
+let &ari = expr
 
 let &t_k1 = "\<Esc>[234;"
 
-let &foo .= expr
-let &foo ..= expr
-let &foo += expr
-let &foo -= expr
+let &ari .= expr
+let &ari ..= expr
+let &ari += expr
+let &ari -= expr
 
-let &l:foo = expr
+let &l:aleph = expr
 
-let &l:foo .= expr
-let &l:foo ..= expr
-let &l:foo += expr
-let &l:foo -= expr
+let &l:aleph .= expr
+let &l:aleph ..= expr
+let &l:aleph += expr
+let &l:aleph -= expr
 
-let &g:foo = expr
+let &g:aleph = expr
 
-let &g:foo .= expr
-let &g:foo ..= expr
-let &g:foo += expr
-let &g:foo -= expr
+let &g:aleph .= expr
+let &g:aleph ..= expr
+let &g:aleph += expr
+let &g:aleph -= expr
 
 let [foo, bar] = expr
 let [foo,
       \ bar] = expr
-let [v:foo, v:bar] = expr
-let [v:foo,
-      \ v:bar] = expr
-let [&foo, &bar] = expr
-let [&foo,
-      \  &bar] = expr
+let [v:true, v:false] = expr
+let [v:true,
+      \ v:false] = expr
+let [&ari, &bkc] = expr
+let [&ari,
+      \  &bkc] = expr
 let [$foo, $bar] = expr
 let [$foo,
       \  $bar] = expr
@@ -198,18 +198,18 @@
 let [foo,
       \ bar;
       \ baz] = expr
-let [v:foo, v:bar; v:baz] = expr
-let [v:foo,
-      \ v:bar;
-      \ v:baz] = expr
+let [v:true, v:false; v:none] = expr
+let [v:true,
+      \ v:false;
+      \ v:none] = expr
 let [$foo, $bar; $baz] = expr
 let [$foo,
       \ $bar;
       \ $baz] = expr
-let [&foo, &bar; &baz] = expr
-let [&foo,
-      \ &bar;
-      \ &baz] = expr
+let [&ari, &bkc; &cmp] = expr
+let [&ari,
+      \ &bkc;
+      \ &cmp] = expr
 let [@a, @b; @c] = expr
 let [@a,
       \ @b;
@@ -380,3 +380,31 @@
 unlockvar 2 foo bar " comment
 unlockvar 2 foo bar | echo "Foo"
 
+" Scope dictionaries
+
+echo get(b:, 'foo', 42)
+echo get(w:, 'foo', 42)
+echo get(t:, 'foo', 42)
+echo get(g:, 'foo', 42)
+echo get(l:, 'foo', 42)
+echo get(s:, 'foo', 42)
+echo get(a:, 'foo', 42)
+echo get(v:, 'foo', 42)
+
+for k in keys(b:) | echo b:[k] | endfor
+for k in keys(w:) | echo w:[k] | endfor
+for k in keys(t:) | echo t:[k] | endfor
+for k in keys(g:) | echo g:[k] | endfor
+for k in keys(l:) | echo l:[k] | endfor
+for k in keys(s:) | echo s:[k] | endfor
+for k in keys(a:) | echo a:[k] | endfor
+for k in keys(v:) | echo v:[k] | endfor
+
+" Neovim-specific variables (not highlighted by default)
+
+echo v:lua v:msgpack_types v:relnum v:stderr v:termrequest v:virtnum
+
+echo &channel &inccommand &mousescroll &pumblend &redrawdebug &scrollback
+echo &shada &shadafile &statuscolumn &termpastefilter &termsync &winbar
+echo &winblend &winhighlight
+