@@ -1766,6 +1766,29 @@ function! s:VimLParser.ends_excmds(c)
17661766 return a: c == # ' ' || a: c == # ' |' || a: c == # ' "' || a: c == # ' <EOF>' || a: c == # ' <EOL>'
17671767endfunction
17681768
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+
17691792let s: VimLParser .builtin_commands = [
17701793 \ {' name' : ' append' , ' minlen' : 1 , ' flags' : ' BANG|RANGE|ZEROR|TRLBAR|CMDWIN|MODIFY' , ' parser' : ' parse_cmd_append' },
17711794 \ {' name' : ' abbreviate' , ' minlen' : 2 , ' flags' : ' EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN' , ' parser' : ' parse_cmd_common' },
@@ -2256,7 +2279,7 @@ let s:VimLParser.builtin_commands = [
22562279 \ {' name' : ' wall' , ' minlen' : 2 , ' flags' : ' BANG|TRLBAR|CMDWIN' , ' parser' : ' parse_cmd_common' },
22572280 \ {' name' : ' while' , ' minlen' : 2 , ' flags' : ' EXTRA|NOTRLCOM|SBOXOK|CMDWIN' , ' parser' : ' parse_cmd_while' },
22582281 \ {' 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 ' },
22602283 \ {' name' : ' winpos' , ' minlen' : 4 , ' flags' : ' EXTRA|TRLBAR|CMDWIN' , ' parser' : ' parse_cmd_common' },
22612284 \ {' name' : ' wnext' , ' minlen' : 2 , ' flags' : ' RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
22622285 \ {' name' : ' wprevious' , ' minlen' : 2 , ' flags' : ' RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR' , ' parser' : ' parse_cmd_common' },
0 commit comments