Package: neovim-runtime
Version: 0.4.3-2
Severity: normal

When editing lisp, C, or python files (didn't test any other yet), 
`Highlight_Matching_Pair` throws an error when adding a parenthesis in 
a comment.

Eg. start an empty python file and enter

    # (

to get the error.


Please excuse the german strings.


-- EINFÜGEN --
Ausführung von CursorMovedI Autokommandos für "*"
Autokommando call s:Highlight_Matching_Pair()

Zeile 0: call s:Highlight_Matching_Pair()
rufe function <SNR>67_Highlight_Matching_Pair auf()

Zeile 1:   " Remove any previous match.
Zeile 2:   if exists('w:paren_hl_on') && w:paren_hl_on
Zeile 3:     silent! call matchdelete(3)
Zeile 4:     let w:paren_hl_on = 0
Zeile 5:   endif
Zeile 6: 
Zeile 7:   " Avoid that we remove the popup menu.
Zeile 8:   " Return when there are no colors (looks like the cursor jumps).
Zeile 9:   if pumvisible() || (&t_Co < 8 && !has("gui_running"))
Zeile 10:     return
Zeile 11:   endif
Zeile 12: 
Zeile 13:   " Get the character under the cursor and check if it's in 
'matchpairs'.
Zeile 14:   let c_lnum = line('.')
Zeile 15:   let c_col = col('.')
Zeile 16:   let before = 0
Zeile 17: 
Zeile 18:   let text = getline(c_lnum)
Zeile 19:   let matches = matchlist(text, '\(.\)\=\%'.c_col.'c\(.\=\)')
Zeile 20:   if empty(matches)
Zeile 21:     let [c_before, c] = ['', '']
Zeile 22:   else
Zeile 23:     let [c_before, c] = matches[1:2]
Zeile 24:   endif
Zeile 25:   let plist = split(&matchpairs, '.\zs[:,]')
Zeile 26:   let i = index(plist, c)
Zeile 27:   if i < 0
Zeile 28:     " not found, in Insert mode try character before the cursor
Zeile 29:     if c_col > 1 && (mode() == 'i' || mode() == 'R')
Zeile 30:       let before = strlen(c_before)
Zeile 31:       let c = c_before
Zeile 32:       let i = index(plist, c)
Zeile 33:     endif
Zeile 34:     if i < 0
Zeile 35:       " not found, nothing to do
Zeile 36:       return
Zeile 37:     endif
Zeile 38:   endif
Zeile 39: 
Zeile 40:   " Figure out the arguments for searchpairpos().
Zeile 41:   if i % 2 == 0
Zeile 42:     let s_flags = 'nW'
Zeile 43:     let c2 = plist[i + 1]
Zeile 44:   else
Zeile 45:     let s_flags = 'nbW'
Zeile 46:     let c2 = c
Zeile 47:     let c = plist[i - 1]
Zeile 48:   endif
Zeile 49:   if c == '['
Zeile 50:     let c = '\['
Zeile 51:     let c2 = '\]'
Zeile 52:   endif
Zeile 53: 
Zeile 54:   " Find the match.  When it was just before the cursor move it there 
for a
Zeile 55:   " moment.
Zeile 56:   if before > 0
Zeile 57:     let has_getcurpos = exists("*getcurpos")
Zeile 58:     if has_getcurpos
Zeile 59:       " getcurpos() is more efficient but doesn't exist before 
7.4.313.
Zeile 60:       let save_cursor = getcurpos()
Zeile 61:     else
Zeile 62:       let save_cursor = winsaveview()
Zeile 63:     endif
Zeile 64:     call cursor(c_lnum, c_col - before)
Zeile 65:   endif
Zeile 66: 
Zeile 67:   " Build an expression that detects whether the current cursor 
position is in
Zeile 68:   " certain syntax types (string, comment, etc.), for use as 
searchpairpos()'s
Zeile 69:   " skip argument.
Zeile 70:   " We match "escape" for special items, such as lispEscapeSpecial.
Zeile 71:   let s_skip = '!empty(filter(map(synstack(line("."), col(".")), 
''synIDattr(v:val, "name")''), ' . '''v:val =~? 
"string\\|character\\|singlequote\\|escape\\|comment"''))'
Zeile 73:   " If executing the expression determines that the cursor is 
currently in
Zeile 74:   " one of the syntax types, then we want searchpairpos() to find the 
pair
Zeile 75:   " within those syntax types (i.e., not skip).  Otherwise, the 
cursor is
Zeile 76:   " outside of the syntax types and s_skip should keep its value so 
we skip any
Zeile 77:   " matching pair inside the syntax types.
Zeile 78:   execute 'if' s_skip '| let s_skip = 0 | endif'
Zeile 78: if !empty(filter(map(synstack(line("."), col(".")), 'synIDattr(v:val, 
"name")'), 'v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"')) 
| let s_skip = 0 | endif
Zeile 78:  let s_skip = 0 | endif
Zeile 78:  endif
Zeile 79: 
Zeile 80:   " Limit the search to lines visible in the window.
Zeile 81:   let stoplinebottom = line('w$')
Zeile 82:   let stoplinetop = line('w0')
Zeile 83:   if i % 2 == 0
Zeile 84:     let stopline = stoplinebottom
Zeile 85:   else
Zeile 86:     let stopline = stoplinetop
Zeile 87:   endif
Zeile 88: 
Zeile 89:   " Limit the search time to 300 msec to avoid a hang on very long 
lines.
Zeile 90:   " This fails when a timeout is not supported.
Zeile 91:   if mode() == 'i' || mode() == 'R'
Zeile 92:     let timeout = exists("b:matchparen_insert_timeout") ? 
b:matchparen_insert_timeout : g:matchparen_insert_timeout
Zeile 93:   else
Zeile 94:     let timeout = exists("b:matchparen_timeout") ? 
b:matchparen_timeout : g:matchparen_timeout
Zeile 95:   endif
Zeile 96:   try
Zeile 97:     let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, 
stopline, timeout)
Ausnahme geworfen: Vim(let):E475: Ungültiges Argument: 0


-- System Information:
Debian Release: 10.0
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable-debug'), (500, 
'testing-debug'), (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 5.2.0-3-amd64 (SMP w/8 CPU cores)
Kernel taint flags: TAINT_WARN
Locale: LANG=de_AT.UTF-8, LC_CTYPE=de_AT.UTF-8 (charmap=UTF-8), 
LANGUAGE=de_AT:de (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

-- no debconf information

-- 

Reply via email to