diff options
| -rw-r--r-- | runtime/plugin/matchit.vim | 12 | ||||
| -rw-r--r-- | runtime/plugin/matchparen.vim | 34 | 
2 files changed, 31 insertions, 15 deletions
| diff --git a/runtime/plugin/matchit.vim b/runtime/plugin/matchit.vim index e3171e5cbb..3b0a8112dc 100644 --- a/runtime/plugin/matchit.vim +++ b/runtime/plugin/matchit.vim @@ -1,5 +1,5 @@  "  matchit.vim: (global plugin) Extended "%" matching -"  Last Change: 2017 Sep 15 +"  Last Change: 2018 Jul 3 by Christian Brabandt  "  Maintainer:  Benji Fisher PhD   <benji@member.AMS.org>  "  Version:     1.13.3, for Vim 6.3+  "		Fix from Tommy Allen included. @@ -268,7 +268,7 @@ function! s:Match_wrapper(word, forward, mode) range    "   execute "normal!" . curcol . "l"    " endif    if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) -    let skip = "0" +    let skip = '0'    else      execute "if " . skip . "| let skip = '0' | endif"    endif @@ -708,10 +708,16 @@ fun! s:MultiMatch(spflag, mode)    let openpat = substitute(openpat, ',', '\\|', 'g')    let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g')    let closepat = substitute(closepat, ',', '\\|', 'g') +    if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on"))      let skip = '0'    else -    execute "if " . skip . "| let skip = '0' | endif" +    try +      execute "if " . skip . "| let skip = '0' | endif" +    catch /^Vim\%((\a\+)\)\=:E363/ +      " We won't find anything, so skip searching, should keep Vim responsive. +      return +    endtry    endif    mark '    let level = v:count1 diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim index d53fb22df0..65b9fe57bf 100644 --- a/runtime/plugin/matchparen.vim +++ b/runtime/plugin/matchparen.vim @@ -1,6 +1,6 @@  " Vim plugin for showing matching parens  " Maintainer:  Bram Moolenaar <Bram@vim.org> -" Last Change: 2018 Jun 23 +" Last Change: 2018 Jul 3  " Exit quickly when:  " - this plugin was already loaded (or disabled) @@ -103,18 +103,28 @@ function! s:Highlight_Matching_Pair()      call cursor(c_lnum, c_col - before)    endif -  " Build an expression that detects whether the current cursor position is in -  " certain syntax types (string, comment, etc.), for use as searchpairpos()'s -  " skip argument. -  " We match "escape" for special items, such as lispEscapeSpecial. -  let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' . +  if !has("syntax") || !exists("g:syntax_on") +    let s_skip = "0" +  else +    " Build an expression that detects whether the current cursor position is +    " in certain syntax types (string, comment, etc.), for use as +    " searchpairpos()'s skip argument. +    " We match "escape" for special items, such as lispEscapeSpecial. +    let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' .  	\ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))' -  " If executing the expression determines that the cursor is currently in -  " one of the syntax types, then we want searchpairpos() to find the pair -  " within those syntax types (i.e., not skip).  Otherwise, the cursor is -  " outside of the syntax types and s_skip should keep its value so we skip any -  " matching pair inside the syntax types. -  execute 'if' s_skip '| let s_skip = "0" | endif' +    " If executing the expression determines that the cursor is currently in +    " one of the syntax types, then we want searchpairpos() to find the pair +    " within those syntax types (i.e., not skip).  Otherwise, the cursor is +    " outside of the syntax types and s_skip should keep its value so we skip +    " any matching pair inside the syntax types. +    " Catch if this throws E363: pattern uses more memory than 'maxmempattern'. +    try +      execute 'if ' . s_skip . ' | let s_skip = "0" | endif' +    catch /^Vim\%((\a\+)\)\=:E363/ +      " We won't find anything, so skip searching, should keep Vim responsive. +      return +    endtry +  endif    " Limit the search to lines visible in the window.    let stoplinebottom = line('w$') | 
