diff options
Diffstat (limited to 'runtime')
| -rw-r--r-- | runtime/plugin/matchparen.vim | 13 | 
1 files changed, 10 insertions, 3 deletions
| diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim index 817ce62b28..3804ab949a 100644 --- a/runtime/plugin/matchparen.vim +++ b/runtime/plugin/matchparen.vim @@ -98,10 +98,17 @@ function! s:Highlight_Matching_Pair()      call cursor(c_lnum, c_col - before)    endif -  " When not in a string or comment ignore matches inside them. +  " 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 ='synIDattr(synID(line("."), col("."), 0), "name") ' . -	\ '=~?  "string\\|character\\|singlequote\\|escape\\|comment"' +  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'    " Limit the search to lines visible in the window. | 
