@@ -1766,6 +1766,29 @@ function! s:VimLParser.ends_excmds(c)
1766
1766
return a: c == # ' ' || a: c == # ' |' || a: c == # ' "' || a: c == # ' <EOF>' || a: c == # ' <EOL>'
1767
1767
endfunction
1768
1768
1769
+ " FIXME: validate argument
1770
+ function ! s: VimLParser .parse_wincmd ()
1771
+ let c = self .reader.getn (1 )
1772
+ if c == # ' '
1773
+ throw s: Err (' E471: Argument required' , self .reader.getpos ())
1774
+ elseif c == # ' g' || c == # " \x07 " " <C-G>
1775
+ let c2 = self .reader.getn (1 )
1776
+ if c2 == # ' ' || s: iswhite (c2)
1777
+ throw s: Err (' E474: Invalid Argument' , self .reader.getpos ())
1778
+ endif
1779
+ endif
1780
+ let end = self .reader.getpos ()
1781
+ call self .reader.skip_white ()
1782
+ if ! self .ends_excmds (self .reader.peek ())
1783
+ throw s: Err (' E474: Invalid Argument' , self .reader.getpos ())
1784
+ endif
1785
+ let node = s: Node (s: NODE_EXCMD )
1786
+ let node.pos = self .ea .cmdpos
1787
+ let node.ea = self .ea
1788
+ let node.str = self .reader.getstr (self .ea .linepos, end )
1789
+ call self .add_node (node)
1790
+ endfunction
1791
+
1769
1792
let s: VimLParser .builtin_commands = [
1770
1793
\ {' name' : ' append' , ' minlen' : 1 , ' flags' : ' BANG|RANGE|ZEROR|TRLBAR|CMDWIN|MODIFY' , ' parser' : ' parse_cmd_append' },
1771
1794
\ {' name' : ' abbreviate' , ' minlen' : 2 , ' flags' : ' EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN' , ' parser' : ' parse_cmd_common' },
@@ -2256,7 +2279,7 @@ let s:VimLParser.builtin_commands = [
2256
2279
\ {' name' : ' wall' , ' minlen' : 2 , ' flags' : ' BANG|TRLBAR|CMDWIN' , ' parser' : ' parse_cmd_common' },
2257
2280
\ {' name' : ' while' , ' minlen' : 2 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_while' },
2258
2281
\ {' name' : ' winsize' , ' minlen' : 2 , ' flags' : ' EXTRA|NEEDARG|TRLBAR' , ' parser' : ' parse_cmd_common' },
2259
- \ {' name' : ' wincmd' , ' minlen' : 4 , ' flags' : ' NEEDARG|WORD1|RANGE|NOTADR' , ' parser' : ' parse_cmd_common ' },
2282
+ \ {' name' : ' wincmd' , ' minlen' : 4 , ' flags' : ' NEEDARG|WORD1|RANGE|NOTADR' , ' parser' : ' parse_wincmd ' },
2260
2283
\ {' name' : ' winpos' , ' minlen' : 4 , ' flags' : ' EXTRA|TRLBAR|CMDWIN' , ' parser' : ' parse_cmd_common' },
2261
2284
\ {' name' : ' wnext' , ' minlen' : 2 , ' flags' : ' RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
2262
2285
\ {' name' : ' wprevious' , ' minlen' : 2 , ' flags' : ' RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
0 commit comments