diff --git a/autoload/vimlparser.vim b/autoload/vimlparser.vim index d35db75..649952d 100644 --- a/autoload/vimlparser.vim +++ b/autoload/vimlparser.vim @@ -1939,7 +1939,21 @@ endfunction " FIXME: validate argument function! s:VimLParser.parse_cmd_syntax() - let end = self.separate_nextcmd() + let end = self.reader.getpos() + while s:TRUE + let end = self.reader.getpos() + let c = self.reader.peek() + if c == "/" || c == "'" || c == "\"" + call self.reader.getn(1) + call self.parse_pattern(c) + elseif c == "=" + call self.reader.getn(1) + call self.parse_pattern(" ") + elseif self.ends_excmds(c) + break + endif + call self.reader.getn(1) + endwhile let node = s:Node(s:NODE_EXCMD) let node.pos = self.ea.cmdpos let node.ea = self.ea diff --git a/go/vimlparser.go b/go/vimlparser.go index 71b470d..f991fee 100644 --- a/go/vimlparser.go +++ b/go/vimlparser.go @@ -1774,7 +1774,21 @@ func (self *VimLParser) parse_wincmd() { // FIXME: validate argument func (self *VimLParser) parse_cmd_syntax() { - var end = self.separate_nextcmd() + var end = self.reader.getpos() + for true { + end = self.reader.getpos() + var c = self.reader.peek() + if c == "/" || c == "'" || c == "\"" { + self.reader.getn(1) + self.parse_pattern(c) + } else if c == "=" { + self.reader.getn(1) + self.parse_pattern(" ") + } else if self.ends_excmds(c) { + break + } + self.reader.getn(1) + } var node = Node(NODE_EXCMD) node.pos = self.ea.cmdpos node.ea = self.ea diff --git a/test/test_syncmd.ok b/test/test_syncmd.ok index 86ba677..f56098d 100644 --- a/test/test_syncmd.ok +++ b/test/test_syncmd.ok @@ -3,3 +3,6 @@ (excmd "syntax") (excmd "syntax enable") (excmd "syntax list GroupName") +(excmd "syn match pythonError \"[&|]\\{2,}\" display") +(excmd "syntax match qfFileName /^\\zs\\S[^|]\\+\\/\\ze[^|\\/]\\+\\/[^|\\/]\\+|/ conceal cchar=+") +(excmd "syntax region jsString start=+\"+ skip=+\\\\\\(\"\\|$\\)+ end=+\"\\|$+ contains=jsSpecial,@Spell extend") diff --git a/test/test_syncmd.vim b/test/test_syncmd.vim index 6530641..d25dea0 100644 --- a/test/test_syncmd.vim +++ b/test/test_syncmd.vim @@ -2,3 +2,6 @@ if 1 | syntax on | endif syntax syntax enable syntax list GroupName +syn match pythonError "[&|]\{2,}" display +syntax match qfFileName /^\zs\S[^|]\+\/\ze[^|\/]\+\/[^|\/]\+|/ conceal cchar=+ +syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend