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 --