diff --git a/autoload/snipMate.vim b/autoload/snipMate.vim index dcd28f6..2213227 100644 --- a/autoload/snipMate.vim +++ b/autoload/snipMate.vim @@ -75,15 +75,17 @@ endf " Prepare snippet to be processed by s:BuildTabStops fun s:ProcessSnippet(snip) let snippet = a:snip - " Evaluate eval (`...`) expressions. + " Evaluate eval (`...`) expressions. + " Backquotes prefixed with a backslash are ignored. " Using a loop here instead of a regex fixes a bug with nested "\=". if stridx(snippet, '`') != -1 - while match(snippet, '`.\{-}`') != -1 - let snippet = substitute(snippet, '`.\{-}`', - \ substitute(eval(matchstr(snippet, '`\zs.\{-}\ze`')), - \ "\n\\%$", '', ''), '') + while match(snippet, '[^\\]`.\{-}[^\\]`') != -1 + let snippet = substitute(snippet, '[^\\]\zs`.\{-}[^\\]`\ze', + \ substitute(eval(matchstr(snippet, '[^\\]`\zs.\{-}[^\\]\ze`')), + \ "\n\\%$", '', ''), '') endw let snippet = substitute(snippet, "\r", "\n", 'g') + let snippet = substitute(snippet, '\\`', '`', 'g') endif " Place all text after a colon in a tab stop after the tab stop diff --git a/syntax/snippet.vim b/syntax/snippet.vim index 5e919e7..3aa8571 100644 --- a/syntax/snippet.vim +++ b/syntax/snippet.vim @@ -3,7 +3,7 @@ syn match snipComment '^#.*' syn match placeHolder '\${\d\+\(:.\{-}\)\=}' contains=snipCommand syn match tabStop '\$\d\+' -syn match snipCommand '`.\{-}`' +syn match snipCommand '[^\\]`.\{-}`' syn match snippet '^snippet.*' transparent contains=multiSnipText,snipKeyword syn match multiSnipText '\S\+ \zs.*' contained syn match snipKeyword '^snippet'me=s+8 contained