Commit: patch 9.1.1933: completion: complete_match() is not useful

4 views
Skip to first unread message

Christian Brabandt

unread,
Nov 27, 2025, 4:45:44 PM (2 days ago) Nov 27
to vim...@googlegroups.com
patch 9.1.1933: completion: complete_match() is not useful

Commit: https://github.com/vim/vim/commit/cbcbff871224115c45bbd14582749a487c6fad30
Author: Girish Palya <giri...@gmail.com>
Date: Thu Nov 27 21:19:54 2025 +0000

patch 9.1.1933: completion: complete_match() is not useful

Problem: completion: complete_match() Vim script function and
'isexpand' option are not that useful and confusing
(after v9.1.1341)
Solution: Remove function and option and clean up code and documentation
(Girish Palya).

complete_match() and 'isexpand' add no real functionality to Vim. They
duplicate what `strridx()` already does, yet pretend to be part of the
completion system. They have nothing to do with the completion mechanism.

* `f_complete_match()` in `insexpand.c` does not call any completion code.
It’s just a `STRNCMP()` wrapper with fluff logic.
* `'isexpand'` exists only as a proxy argument to that function.
It does nothing on its own and amounts to misuse of a new option.

The following Vim script function can be used to implement the same
functionality:

```vim
func CompleteMatch(triggers, sep=',')
let line = getline('.')->strpart(0, col('.') - 1)
let result = []
for trig in split(a:triggers, a:sep)
let idx = strridx(line, trig)
if l:idx >= 0
call add(result, [idx + 1, trig])
endif
endfor
return result
endfunc
```

related: #16716
fixes: #18563
closes: #18790

Signed-off-by: Girish Palya <giri...@gmail.com>
Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index 229832c9d..988824f4b 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt* For Vim version 9.1. Last change: 2025 Nov 09
+*builtin.txt* For Vim version 9.1. Last change: 2025 Nov 27


VIM REFERENCE MANUAL by Bram Moolenaar
@@ -136,7 +136,6 @@ complete({startcol}, {matches}) none set Insert mode completion
complete_add({expr}) Number add completion match
complete_check() Number check for key typed during completion
complete_info([{what}]) Dict get current completion information
-complete_match([{lnum}, {col}]) List get completion column and trigger text
confirm({msg} [, {choices} [, {default} [, {type}]]])
Number number of choice picked by user
copy({expr}) any make a shallow copy of {expr}
@@ -2072,51 +2071,6 @@ complete_info([{what}]) *complete_info()*
Return type: dict<any>


-complete_match([{lnum}, {col}]) *complete_match()*
- Searches backward from the given position and returns a List
- of matches according to the 'isexpand' option. When no
- arguments are provided, uses the current cursor position.
-
- Each match is represented as a List containing
- [startcol, trigger_text] where:
- - startcol: column position where completion should start,
- or -1 if no trigger position is found. For multi-character
- triggers, returns the column of the first character.
- - trigger_text: the matching trigger string from 'isexpand',
- or empty string if no match was found or when using the
- default 'iskeyword' pattern.
-
- When 'isexpand' is empty, uses the 'iskeyword' pattern "\k\+$"
- to find the start of the current keyword.
-
- Examples: >
- set isexpand=.,->,/,/*,abc
- func CustomComplete()
- let res = complete_match()
- if res->len() == 0 | return | endif
- let [col, trigger] = res[0]
- let items = []
- if trigger == '/*'
- let items = ['/** */']
- elseif trigger == '/'
- let items = ['/*! */', '// TODO:', '// fixme:']
- elseif trigger == '.'
- let items = ['length()']
- elseif trigger =~ '^\->'
- let items = ['map()', 'reduce()']
- elseif trigger =~ '^ bc'
- let items = ['def', 'ghk']
- endif
- if items->len() > 0
- let startcol = trigger =~ '^/' ? col : col + len(trigger)
- call complete(startcol, items)
- endif
- endfunc
- inoremap <Tab> <Cmd>call CustomComplete()<CR>
-<
- Return type: list<list<any>>
-
-
confirm({msg} [, {choices} [, {default} [, {type}]]]) *confirm()*
confirm() offers the user a dialog, from which a choice can be
made. It returns the number of the choice. For the first
diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt
index c09e8e744..959534529 100644
--- a/runtime/doc/intro.txt
+++ b/runtime/doc/intro.txt
@@ -275,7 +275,7 @@ Vim would never have become what it is now, without the help of these people!
improvements
Doug Kearns Runtime file maintainer
Foxe Chen Wayland support, new features
- glepnir completion feature
+ glepnir work on improving completion feature, fixes
Girish Palya autocompletion (ins/cmdline), omnifunc
composing, search/subst completion, and more.
Hirohito Higashi lots of patches and fixes
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 5ded591bd..03c0c547b 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -5229,23 +5229,6 @@ A jump table for the options with a short description can be found at |Q_op|.
and there is a letter before it, the completed part is made uppercase.
With 'noinfercase' the match is used as-is.

- *'isexpand'* *'ise'*
-'isexpand' 'ise' string (default: "")
- local to buffer
- Defines characters and patterns for completion in insert mode. Used
- by the |complete_match()| function to determine the starting position
- for completion. This is a comma-separated list of triggers. Each
- trigger can be:
- - A single character like "." or "/"
- - A sequence of characters like "->", "/*", or "/**"
-
- Note: Use "\," to add a literal comma as trigger character, see
- |option-backslash|.
-
- Examples: >
- set isexpand=.,->,/*,\,
-<
-
*'insertmode'* *'im'* *'noinsertmode'* *'noim'*
'insertmode' 'im' boolean (default off)
global
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 0e7000d28..a53a133ec 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -449,8 +449,6 @@ $quote eval.txt /*$quote*
'infercase' options.txt /*'infercase'*
'insertmode' options.txt /*'insertmode'*
'is' options.txt /*'is'*
-'ise' options.txt /*'ise'*
-'isexpand' options.txt /*'isexpand'*
'isf' options.txt /*'isf'*
'isfname' options.txt /*'isfname'*
'isi' options.txt /*'isi'*
@@ -6801,7 +6799,6 @@ complete_add() builtin.txt /*complete_add()*
complete_check() builtin.txt /*complete_check()*
complete_info() builtin.txt /*complete_info()*
complete_info_mode builtin.txt /*complete_info_mode*
-complete_match() builtin.txt /*complete_match()*
completed_item-variable eval.txt /*completed_item-variable*
completion-functions usr_41.txt /*completion-functions*
complex-change change.txt /*complex-change*
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 5880b344f..5fe5e575c 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt* For Vim version 9.1. Last change: 2025 Nov 09
+*usr_41.txt* For Vim version 9.1. Last change: 2025 Nov 27


VIM USER MANUAL by Bram Moolenaar
@@ -1137,8 +1137,6 @@ Insert mode completion: *completion-functions*
complete_add() add to found matches
complete_check() check if completion should be aborted
complete_info() get current completion information
- complete_match() get insert completion start match col and
- trigger text
preinserted() check if text is inserted after cursor
pumvisible() check if the popup menu is displayed
pum_getpos() position and size of popup menu if visible
diff --git a/runtime/doc/version9.txt b/runtime/doc/version9.txt
index 8d47dbb6c..a4bd33be8 100644
--- a/runtime/doc/version9.txt
+++ b/runtime/doc/version9.txt
@@ -1,4 +1,4 @@
-*version9.txt* For Vim version 9.1. Last change: 2025 Nov 26
+*version9.txt* For Vim version 9.1. Last change: 2025 Nov 27


VIM REFERENCE MANUAL by Bram Moolenaar
@@ -41802,7 +41802,6 @@ Functions: ~
|blob2str()| convert a blob into a List of strings
|bindtextdomain()| set message lookup translation base path
|cmdcomplete_info()| get current cmdline completion info
-|complete_match()| get completion and trigger info
|diff()| diff two Lists of strings
|filecopy()| copy a file {from} to {to}
|foreach()| apply function to List items
@@ -41885,7 +41884,6 @@ Options: ~
'eventignorewin' autocommand events that are ignored in a window
'findfunc' Vim function to obtain the results for a |:find|
command
-'isexpand' defines triggers for completion
'lhistory' Size of the location list stack |quickfix-stack|
'maxsearchcount' Set the maximum number for search-stat |shm-S|
'messagesopt' configure |:messages| and |hit-enter| prompt
diff --git a/runtime/optwin.vim b/runtime/optwin.vim
index 52ef0514d..7987a4877 100644
--- a/runtime/optwin.vim
+++ b/runtime/optwin.vim
@@ -1,7 +1,7 @@
" These commands create the option window.
"
" Maintainer: The Vim Project <https://github.com/vim/vim>
-" Last Change: 2025 Nov 26
+" Last Change: 2025 Nov 27
" Former Maintainer: Bram Moolenaar <Br...@vim.org>

" If there already is an option window, jump to that one.
@@ -1285,8 +1285,6 @@ call <SID>AddOption("isfname", gettext("specifies the characters in a file name"
call <SID>OptionG("isf", &isf)
call <SID>AddOption("isident", gettext("specifies the characters in an identifier"))
call <SID>OptionG("isi", &isi)
-call <SID>AddOption("isexpand", gettext("defines trigger strings for complete_match()"))
-call append("$", " " .. s:local_to_buffer)
call <SID>AddOption("iskeyword", gettext("specifies the characters in a keyword"))
call append("$", " " .. s:local_to_buffer)
call <SID>OptionL("isk")
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 747f8b52b..6d1d00381 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -2,7 +2,7 @@
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougk...@gmail.com>
-" Last Change: 2025 Nov 26
+" Last Change: 2025 Nov 27
" Former Maintainer: Charles E. Campbell

" DO NOT CHANGE DIRECTLY.
@@ -67,12 +67,12 @@ syn keyword vimStdPlugin contained Arguments Asm Break Cfilter Clear Continue Di
syn keyword vimOption contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile skipwhite nextgroup=vimSetEqual,vimSetMod
syn keyword vimOption contained efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight skipwhite nextgroup=vimSetEqual,vimSetMod
-syn keyword vimOption contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine skipwhite nextgroup=vimSetEqual,vimSetMod
-syn keyword vimOption contained mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader pmbcs printmbcharset skipwhite nextgroup=vimSetEqual,vimSetMod
-syn keyword vimOption contained pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess skipwhite nextgroup=vimSetEqual,vimSetMod
-syn keyword vimOption contained sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors skipwhite nextgroup=vimSetEqual,vimSetMod
-syn keyword vimOption contained twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window skipwhite nextgroup=vimSetEqual,vimSetMod
-syn keyword vimOption contained wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine mfd maxfuncdepth skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader pmbcs printmbcharset pmbfn printmbfont skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess sn shortname sbr showbreak skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors twk termwinkey twsl termwinscroll skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight skipwhite nextgroup=vimSetEqual,vimSetMod
+syn keyword vimOption contained wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes skipwhite nextgroup=vimSetEqual,vimSetMod

" vimOptions: These are the turn-off setting variants {{{2
" GEN_SYN_VIM: vimOption turn-off, START_STR='syn keyword vimOption contained', END_STR=''
@@ -106,12 +106,12 @@ syn match vimOption contained "t_k;"
syn keyword vimOptionVarName contained al aleph ari allowrevins ambw ambiwidth arab arabic arshape arabicshape acd autochdir ac autocomplete acl autocompletedelay act autocompletetimeout ai autoindent ar autoread asd autoshelldir aw autowrite awa autowriteall bg background bs backspace bk backup bkc backupcopy bdir backupdir bex backupext bsk backupskip bdlay balloondelay beval ballooneval bevalterm balloonevalterm bexpr balloonexpr bo belloff bin binary bomb brk breakat bri breakindent briopt breakindentopt bsdir browsedir bh bufhidden bl buflisted bt buftype cmp casemap cdh cdhome cd cdpath cedit ccv charconvert chi chistory cin cindent cink cinkeys cino cinoptions cinsd cinscopedecls cinw cinwords cb clipboard cpm clipmethod ch cmdheight cwh cmdwinheight cc colorcolumn
syn keyword vimOptionVarName contained co columns com comments cms commentstring cp compatible cpt complete cfu completefunc cia completeitemalign cot completeopt cpp completepopup csl completeslash cto completetimeout cocu concealcursor cole conceallevel cf confirm ci copyindent cpo cpoptions cm cryptmethod cspc cscopepathcomp csprg cscopeprg csqf cscopequickfix csre cscoperelative cst cscopetag csto cscopetagorder csverb cscopeverbose crb cursorbind cuc cursorcolumn cul cursorline culopt cursorlineopt debug def define deco delcombine dict dictionary diff dia diffanchors dex diffexpr dip diffopt dg digraph dir directory dy display ead eadirection ed edcompatible emo emoji enc encoding eof endoffile eol endofline ea equalalways ep equalprg eb errorbells ef errorfile
syn keyword vimOptionVarName contained efm errorformat ek esckeys ei eventignore eiw eventignorewin et expandtab ex exrc fenc fileencoding fencs fileencodings ff fileformat ffs fileformats fic fileignorecase ft filetype fcs fillchars ffu findfunc fixeol fixendofline fcl foldclose fdc foldcolumn fen foldenable fde foldexpr fdi foldignore fdl foldlevel fdls foldlevelstart fmr foldmarker fdm foldmethod fml foldminlines fdn foldnestmax fdo foldopen fdt foldtext fex formatexpr flp formatlistpat fo formatoptions fp formatprg fs fsync gd gdefault gfm grepformat gp grepprg gcr guicursor gfn guifont gfs guifontset gfw guifontwide ghr guiheadroom gli guiligatures go guioptions guipty gtl guitablabel gtt guitabtooltip hf helpfile hh helpheight hlg helplang hid hidden hl highlight
-syn keyword vimOptionVarName contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode ise isexpand isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime
-syn keyword vimOptionVarName contained mco maxcombine mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader
-syn keyword vimOptionVarName contained pmbcs printmbcharset pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround
-syn keyword vimOptionVarName contained sw shiftwidth shm shortmess sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi
-syn keyword vimOptionVarName contained tenc termencoding tgc termguicolors twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions
-syn keyword vimOptionVarName contained wak winaltkeys wcr wincolor wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes
+syn keyword vimOptionVarName contained hi history hk hkmap hkp hkmapp hls hlsearch icon iconstring ic ignorecase imaf imactivatefunc imak imactivatekey imc imcmdline imd imdisable imi iminsert ims imsearch imsf imstatusfunc imst imstyle inc include inex includeexpr is incsearch inde indentexpr indk indentkeys inf infercase im insertmode isf isfname isi isident isk iskeyword isp isprint js joinspaces jop jumpoptions key kmp keymap km keymodel kpc keyprotocol kp keywordprg lmap langmap lm langmenu lnr langnoremap lrm langremap ls laststatus lz lazyredraw lhi lhistory lbr linebreak lines lsp linespace lisp lop lispoptions lw lispwords list lcs listchars lpl loadplugins luadll magic mef makeef menc makeencoding mp makeprg mps matchpairs mat matchtime mco maxcombine
+syn keyword vimOptionVarName contained mfd maxfuncdepth mmd maxmapdepth mm maxmem mmp maxmempattern mmt maxmemtot msc maxsearchcount mis menuitems mopt messagesopt msm mkspellmem ml modeline mle modelineexpr mls modelines ma modifiable mod modified more mouse mousef mousefocus mh mousehide mousem mousemodel mousemev mousemoveevent mouses mouseshape mouset mousetime mzq mzquantum mzschemedll mzschemegcdll nf nrformats nu number nuw numberwidth ofu omnifunc odev opendevice opfunc operatorfunc ost osctimeoutlen pp packpath para paragraphs paste pt pastetoggle pex patchexpr pm patchmode pa path perldll pi preserveindent pvh previewheight pvp previewpopup pvw previewwindow pdev printdevice penc printencoding pexpr printexpr pfn printfont pheader printheader pmbcs printmbcharset
+syn keyword vimOptionVarName contained pmbfn printmbfont popt printoptions prompt pb pumborder ph pumheight pmw pummaxwidth pw pumwidth pythondll pythonhome pythonthreedll pythonthreehome pyx pyxversion qftf quickfixtextfunc qe quoteescape ro readonly rdt redrawtime re regexpengine rnu relativenumber remap rop renderoptions report rs restorescreen ri revins rl rightleft rlc rightleftcmd rubydll ru ruler ruf rulerformat rtp runtimepath scr scroll scb scrollbind scf scrollfocus sj scrolljump so scrolloff sbo scrollopt sect sections secure sel selection slm selectmode ssop sessionoptions sh shell shcf shellcmdflag sp shellpipe shq shellquote srr shellredir ssl shellslash stmp shelltemp st shelltype sxe shellxescape sxq shellxquote sr shiftround sw shiftwidth shm shortmess
+syn keyword vimOptionVarName contained sn shortname sbr showbreak sc showcmd sloc showcmdloc sft showfulltag sm showmatch smd showmode stal showtabline stpl showtabpanel ss sidescroll siso sidescrolloff scl signcolumn scs smartcase si smartindent sta smarttab sms smoothscroll sts softtabstop spell spc spellcapcheck spf spellfile spl spelllang spo spelloptions sps spellsuggest sb splitbelow spk splitkeep spr splitright sol startofline stl statusline su suffixes sua suffixesadd swf swapfile sws swapsync swb switchbuf smc synmaxcol syn syntax tcl tabclose tal tabline tpm tabpagemax tpl tabpanel tplo tabpanelopt ts tabstop tbs tagbsearch tc tagcase tfu tagfunc tl taglength tr tagrelative tag tags tgst tagstack tcldll term tbidi termbidi tenc termencoding tgc termguicolors
+syn keyword vimOptionVarName contained twk termwinkey twsl termwinscroll tws termwinsize twt termwintype terse ta textauto tx textmode tw textwidth tsr thesaurus tsrfu thesaurusfunc top tildeop to timeout tm timeoutlen title titlelen titleold titlestring tb toolbar tbis toolbariconsize ttimeout ttm ttimeoutlen tbi ttybuiltin tf ttyfast ttym ttymouse tsl ttyscroll tty ttytype udir undodir udf undofile ul undolevels ur undoreload uc updatecount ut updatetime vsts varsofttabstop vts vartabstop vbs verbose vfile verbosefile vdir viewdir vop viewoptions vi viminfo vif viminfofile ve virtualedit vb visualbell warn wiv weirdinvert ww whichwrap wc wildchar wcm wildcharm wig wildignore wic wildignorecase wmnu wildmenu wim wildmode wop wildoptions wak winaltkeys wcr wincolor
+syn keyword vimOptionVarName contained wi window wfb winfixbuf wfh winfixheight wfw winfixwidth wh winheight wmh winminheight wmw winminwidth winptydll wiw winwidth wse wlseat wst wlsteal wtm wltimeoutlen wrap wm wrapmargin ws wrapscan write wa writeany wb writebackup wd writedelay xtermcodes
" GEN_SYN_VIM: vimOption term output code variable, START_STR='syn keyword vimOptionVarName contained', END_STR=''
syn keyword vimOptionVarName contained t_AB t_AF t_AU t_AL t_al t_bc t_BE t_BD t_cd t_ce t_Ce t_CF t_cl t_cm t_Co t_CS t_Cs t_cs t_CV t_da t_db t_DL t_dl t_ds t_Ds t_EC t_EI t_fs t_fd t_fe t_GP t_IE t_IS t_ke t_ks t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RF t_RB t_RC t_RI t_Ri t_RK t_RS t_RT t_RV t_Sb t_SC t_se t_Sf t_SH t_SI t_Si t_so t_SR t_sr t_ST t_Te t_te t_TE t_ti t_TI t_Ts t_ts t_u7 t_ue t_us t_Us t_ut t_vb t_ve t_vi t_VS t_vs t_WP t_WS t_XM t_xn t_xs t_ZH t_ZR t_8f t_8b t_8u t_xo
syn keyword vimOptionVarName contained t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ku
@@ -154,14 +154,14 @@ syn case match
" Function Names {{{2
" GEN_SYN_VIM: vimFuncName, START_STR='syn keyword vimFuncName contained', END_STR=''
syn keyword vimFuncName contained abs acos add and append appendbufline argc argidx arglistid argv asin assert_beeps assert_equal assert_equalfile assert_exception assert_fails assert_false assert_inrange assert_match assert_nobeep assert_notequal assert_notmatch assert_report assert_true atan atan2 autocmd_add autocmd_delete autocmd_get balloon_gettext balloon_show balloon_split base64_decode base64_encode bindtextdomain blob2list blob2str browse browsedir bufadd bufexists buflisted bufload bufloaded bufname bufnr bufwinid bufwinnr byte2line byteidx byteidxcomp call ceil ch_canread ch_close ch_close_in ch_evalexpr ch_evalraw ch_getbufnr ch_getjob ch_info ch_log ch_logfile ch_open ch_read ch_readblob ch_readraw ch_sendexpr ch_sendraw ch_setoptions ch_status changenr
-syn keyword vimFuncName contained char2nr charclass charcol charidx chdir cindent clearmatches cmdcomplete_info col complete complete_add complete_check complete_info complete_match confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect
-syn keyword vimFuncName contained get getbufinfo getbufline getbufoneline getbufvar getcellpixels getcellwidths getchangelist getchar getcharmod getcharpos getcharsearch getcharstr getcmdcomplpat getcmdcompltype getcmdline getcmdpos getcmdprompt getcmdscreenpos getcmdtype getcmdwintype getcompletion getcompletiontype getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo getstacktrace gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto
-syn keyword vimFuncName contained histadd histdel histget histnr hlID hlexists hlget hlset hostname iconv id indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret insert instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str list2tuple listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos max menu_info min mkdir mode
-syn keyword vimFuncName contained mzeval nextnonblank ngettext nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno popup_findecho popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setbuf popup_setoptions popup_settext popup_show pow preinserted prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir readdirex readfile reduce reg_executing
-syn keyword vimFuncName contained reg_recording reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round rubyeval screenattr screenchar screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place sign_placelist sign_undefine sign_unplace sign_unplacelist simplify sin sinh slice
-syn keyword vimFuncName contained sort sound_clear sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2blob str2float str2list str2nr strcharlen strcharpart strchars strdisplaywidth strftime strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape term_sendkeys term_setansicolors
-syn keyword vimFuncName contained term_setapi term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon test_getvalue test_gui_event test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_null_tuple test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc tuple2list type typename undofile undotree uniq uri_decode uri_encode utf16idx values virtcol virtcol2col visualmode wildmenumode wildtrigger
-syn keyword vimFuncName contained win_execute win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview winwidth wordcount writefile xor
+syn keyword vimFuncName contained char2nr charclass charcol charidx chdir cindent clearmatches cmdcomplete_info col complete complete_add complete_check complete_info confirm copy cos cosh count cscope_connection cursor debugbreak deepcopy delete deletebufline did_filetype diff diff_filler diff_hlID digraph_get digraph_getlist digraph_set digraph_setlist echoraw empty environ err_teapot escape eval eventhandler executable execute exepath exists exists_compiled exp expand expandcmd extend extendnew feedkeys filecopy filereadable filewritable filter finddir findfile flatten flattennew float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreach foreground fullcommand funcref function garbagecollect get getbufinfo
+syn keyword vimFuncName contained getbufline getbufoneline getbufvar getcellpixels getcellwidths getchangelist getchar getcharmod getcharpos getcharsearch getcharstr getcmdcomplpat getcmdcompltype getcmdline getcmdpos getcmdprompt getcmdscreenpos getcmdtype getcmdwintype getcompletion getcompletiontype getcurpos getcursorcharpos getcwd getenv getfontname getfperm getfsize getftime getftype getimstatus getjumplist getline getloclist getmarklist getmatches getmousepos getmouseshape getpid getpos getqflist getreg getreginfo getregion getregionpos getregtype getscriptinfo getstacktrace gettabinfo gettabvar gettabwinvar gettagstack gettext getwininfo getwinpos getwinposx getwinposy getwinvar glob glob2regpat globpath has has_key haslocaldir hasmapto histadd histdel
+syn keyword vimFuncName contained histget histnr hlID hlexists hlget hlset hostname iconv id indent index indexof input inputdialog inputlist inputrestore inputsave inputsecret insert instanceof interrupt invert isabsolutepath isdirectory isinf islocked isnan items job_getchannel job_info job_setoptions job_start job_status job_stop join js_decode js_encode json_decode json_encode keys keytrans len libcall libcallnr line line2byte lispindent list2blob list2str list2tuple listener_add listener_flush listener_remove localtime log log10 luaeval map maparg mapcheck maplist mapnew mapset match matchadd matchaddpos matcharg matchbufline matchdelete matchend matchfuzzy matchfuzzypos matchlist matchstr matchstrlist matchstrpos max menu_info min mkdir mode mzeval nextnonblank
+syn keyword vimFuncName contained ngettext nr2char or pathshorten perleval popup_atcursor popup_beval popup_clear popup_close popup_create popup_dialog popup_filter_menu popup_filter_yesno popup_findecho popup_findinfo popup_findpreview popup_getoptions popup_getpos popup_hide popup_list popup_locate popup_menu popup_move popup_notification popup_setbuf popup_setoptions popup_settext popup_show pow preinserted prevnonblank printf prompt_getprompt prompt_setcallback prompt_setinterrupt prompt_setprompt prop_add prop_add_list prop_clear prop_find prop_list prop_remove prop_type_add prop_type_change prop_type_delete prop_type_get prop_type_list pum_getpos pumvisible py3eval pyeval pyxeval rand range readblob readdir readdirex readfile reduce reg_executing reg_recording
+syn keyword vimFuncName contained reltime reltimefloat reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remote_startserver remove rename repeat resolve reverse round rubyeval screenattr screenchar screenchars screencol screenpos screenrow screenstring search searchcount searchdecl searchpair searchpairpos searchpos server2client serverlist setbufline setbufvar setcellwidths setcharpos setcharsearch setcmdline setcmdpos setcursorcharpos setenv setfperm setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar settagstack setwinvar sha256 shellescape shiftwidth sign_define sign_getdefined sign_getplaced sign_jump sign_place sign_placelist sign_undefine sign_unplace sign_unplacelist simplify sin sinh slice sort sound_clear
+syn keyword vimFuncName contained sound_playevent sound_playfile sound_stop soundfold spellbadword spellsuggest split sqrt srand state str2blob str2float str2list str2nr strcharlen strcharpart strchars strdisplaywidth strftime strgetchar stridx string strlen strpart strptime strridx strtrans strutf16len strwidth submatch substitute swapfilelist swapinfo swapname synID synIDattr synIDtrans synconcealed synstack system systemlist tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname term_dumpdiff term_dumpload term_dumpwrite term_getaltscreen term_getansicolors term_getattr term_getcursor term_getjob term_getline term_getscrolled term_getsize term_getstatus term_gettitle term_gettty term_list term_scrape term_sendkeys term_setansicolors term_setapi
+syn keyword vimFuncName contained term_setkill term_setrestore term_setsize term_start term_wait terminalprops test_alloc_fail test_autochdir test_feedinput test_garbagecollect_now test_garbagecollect_soon test_getvalue test_gui_event test_ignore_error test_mswin_event test_null_blob test_null_channel test_null_dict test_null_function test_null_job test_null_list test_null_partial test_null_string test_null_tuple test_option_not_set test_override test_refcount test_setmouse test_settime test_srand_seed test_unknown test_void timer_info timer_pause timer_start timer_stop timer_stopall tolower toupper tr trim trunc tuple2list type typename undofile undotree uniq uri_decode uri_encode utf16idx values virtcol virtcol2col visualmode wildmenumode wildtrigger win_execute
+syn keyword vimFuncName contained win_findbuf win_getid win_gettype win_gotoid win_id2tabwin win_id2win win_move_separator win_move_statusline win_screenpos win_splitmove winbufnr wincol windowsversion winheight winlayout winline winnr winrestcmd winrestview winsaveview winwidth wordcount writefile xor

" Predefined variable names {{{2
" GEN_SYN_VIM: vimVarName, START_STR='syn keyword vimVimVarName contained', END_STR=''
diff --git a/src/buffer.c b/src/buffer.c
index 94c6356f8..90104cf0d 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -2499,7 +2499,6 @@ free_buf_options(
clear_string_option(&buf->b_p_cinw);
clear_string_option(&buf->b_p_cot);
clear_string_option(&buf->b_p_cpt);
- clear_string_option(&buf->b_p_ise);
#ifdef FEAT_COMPL_FUNC
clear_string_option(&buf->b_p_cfu);
free_callback(&buf->b_cfu_cb);
diff --git a/src/evalfunc.c b/src/evalfunc.c
index eca95bbcf..222fa4017 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -2131,8 +2131,6 @@ static const funcentry_T global_functions[] =
ret_number_bool, f_complete_check},
{"complete_info", 0, 1, FEARG_1, arg1_list_string,
ret_dict_any, f_complete_info},
- {"complete_match", 0, 2, 0, NULL,
- ret_list_any, f_complete_match},
{"confirm", 1, 4, FEARG_1, arg4_string_string_number_string,
ret_number, f_confirm},
{"copy", 1, 1, FEARG_1, NULL,
diff --git a/src/insexpand.c b/src/insexpand.c
index 1bcadadf8..b44f77d53 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -3921,163 +3921,6 @@ f_complete_check(typval_T *argvars UNUSED, typval_T *rettv)
RedrawingDisabled = save_RedrawingDisabled;
}

-/*
- * Add match item to the return list.
- * Returns FAIL if out of memory, OK otherwise.
- */
- static int
-add_match_to_list(
- typval_T *rettv,
- char_u *str,
- int len,
- int pos)
-{
- list_T *match;
- int ret;
-
- match = list_alloc();
- if (match == NULL)
- return FAIL;
-
- if ((ret = list_append_number(match, pos + 1)) == FAIL
- || (ret = list_append_string(match, str, len)) == FAIL
- || (ret = list_append_list(rettv->vval.v_list, match)) == FAIL)
- {
- vim_free(match);
- return FAIL;
- }
-
- return OK;
-}
-
-/*
- * "complete_match()" function
- */
- void
-f_complete_match(typval_T *argvars, typval_T *rettv)
-{
- linenr_T lnum;
- colnr_T col;
- char_u *line = NULL;
- char_u *ise = NULL;
- regmatch_T regmatch;
- char_u *before_cursor = NULL;
- char_u *cur_end = NULL;
- int bytepos = 0;
- char_u part[MAXPATHL];
- int ret;
-
- if (rettv_list_alloc(rettv) == FAIL)
- return;
-
- ise = curbuf->b_p_ise[0] != NUL ? curbuf->b_p_ise : p_ise;
-
- if (argvars[0].v_type == VAR_UNKNOWN)
- {
- lnum = curwin->w_cursor.lnum;
- col = curwin->w_cursor.col;
- }
- else if (argvars[1].v_type == VAR_UNKNOWN)
- {
- emsg(_(e_invalid_argument));
- return;
- }
- else
- {
- lnum = (linenr_T)tv_get_number(&argvars[0]);
- col = (colnr_T)tv_get_number(&argvars[1]);
- if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count)
- {
- semsg(_(e_invalid_line_number_nr), lnum);
- return;
- }
- if (col < 1 || col > ml_get_buf_len(curbuf, lnum))
- {
- semsg(_(e_invalid_column_number_nr), col + 1);
- return;
- }
- }
-
- line = ml_get_buf(curbuf, lnum, FALSE);
- if (line == NULL)
- return;
-
- before_cursor = vim_strnsave(line, col);
- if (before_cursor == NULL)
- return;
-
- if (ise == NULL || *ise == NUL)
- {
- regmatch.regprog = vim_regcomp((char_u *)"\k\+$", RE_MAGIC);
- if (regmatch.regprog != NULL)
- {
- if (vim_regexec_nl(&regmatch, before_cursor, (colnr_T)0))
- {
- char_u *trig = vim_strnsave(regmatch.startp[0],
- regmatch.endp[0] - regmatch.startp[0]);
- if (trig == NULL)
- {
- vim_free(before_cursor);
- vim_regfree(regmatch.regprog);
- return;
- }
-
- bytepos = (int)(regmatch.startp[0] - before_cursor);
- ret = add_match_to_list(rettv, trig, -1, bytepos);
- vim_free(trig);
- if (ret == FAIL)
- {
- vim_free(before_cursor);
- vim_regfree(regmatch.regprog);
- return;
- }
- }
- vim_regfree(regmatch.regprog);
- }
- }
- else
- {
- char_u *p = ise;
- char_u *p_space = NULL;
-
- cur_end = before_cursor + (int)STRLEN(before_cursor);
-
- while (*p != NUL)
- {
- int len = 0;
- if (p_space)
- {
- len = p - p_space - 1;
- memcpy(part, p_space + 1, len);
- p_space = NULL;
- }
- else
- {
- char_u *next_comma = vim_strchr((*p == ',') ? p + 1 : p, ',');
- if (next_comma && *(next_comma + 1) == ' ')
- p_space = next_comma;
-
- len = copy_option_part(&p, part, MAXPATHL, ",");
- }
-
- if (len > 0 && len <= col)
- {
- if (STRNCMP(cur_end - len, part, len) == 0)
- {
- bytepos = col - len;
- if (add_match_to_list(rettv, part, len, bytepos) == FAIL)
- {
- vim_free(before_cursor);
- return;
- }
- }
- }
- }
- }
-
- vim_free(before_cursor);
-}
-
/*
* Return Insert completion mode name string
*/
diff --git a/src/option.c b/src/option.c
index f903dd79c..b5594dd6e 100644
--- a/src/option.c
+++ b/src/option.c
@@ -6508,9 +6508,6 @@ unset_global_local_option(char_u *name, void *from)
clear_string_option(&buf->b_p_cot);
buf->b_cot_flags = 0;
break;
- case PV_ISE:
- clear_string_option(&buf->b_p_ise);
- break;
case PV_DICT:
clear_string_option(&buf->b_p_dict);
break;
@@ -6639,7 +6636,6 @@ get_varp_scope(struct vimoption *p, int scope)
case PV_INC: return (char_u *)&(curbuf->b_p_inc);
#endif
case PV_COT: return (char_u *)&(curbuf->b_p_cot);
- case PV_ISE: return (char_u *)&(curbuf->b_p_ise);
case PV_DICT: return (char_u *)&(curbuf->b_p_dict);
#ifdef FEAT_DIFF
case PV_DIA: return (char_u *)&(curbuf->b_p_dia);
@@ -6727,8 +6723,6 @@ get_varp(struct vimoption *p)
#endif
case PV_COT: return *curbuf->b_p_cot != NUL
? (char_u *)&(curbuf->b_p_cot) : p->var;
- case PV_ISE: return *curbuf->b_p_ise != NUL
- ? (char_u *)&(curbuf->b_p_ise) : p->var;
case PV_DICT: return *curbuf->b_p_dict != NUL
? (char_u *)&(curbuf->b_p_dict) : p->var;
#ifdef FEAT_DIFF
@@ -7579,7 +7573,6 @@ buf_copy_options(buf_T *buf, int flags)
buf->b_p_dia = empty_option;
#endif
buf->b_p_tsr = empty_option;
- buf->b_p_ise = empty_option;
#ifdef FEAT_COMPL_FUNC
buf->b_p_tsrfu = empty_option;
#endif
diff --git a/src/option.h b/src/option.h
index dc67566d6..df073b2b0 100644
--- a/src/option.h
+++ b/src/option.h
@@ -739,7 +739,6 @@ EXTERN char_u *p_inde; // 'indentexpr'
EXTERN char_u *p_indk; // 'indentkeys'
#endif
EXTERN int p_im; // 'insertmode'
-EXTERN char_u *p_ise; // 'isexpand'
EXTERN char_u *p_isf; // 'isfname'
EXTERN char_u *p_isi; // 'isident'
EXTERN char_u *p_isk; // 'iskeyword'
diff --git a/src/optiondefs.h b/src/optiondefs.h
index fda698535..59d363ffa 100644
--- a/src/optiondefs.h
+++ b/src/optiondefs.h
@@ -93,7 +93,6 @@
# define PV_INEX OPT_BUF(BV_INEX)
#endif
#define PV_INF OPT_BUF(BV_INF)
-#define PV_ISE OPT_BOTH(OPT_BUF(BV_ISE))
#define PV_ISK OPT_BUF(BV_ISK)
#ifdef FEAT_CRYPT
# define PV_KEY OPT_BUF(BV_KEY)
@@ -1493,10 +1492,6 @@ static struct vimoption options[] =
{"insertmode", "im", P_BOOL|P_VI_DEF|P_VIM,
(char_u *)&p_im, PV_NONE, did_set_insertmode, NULL,
{(char_u *)FALSE, (char_u *)0L} SCTX_INIT},
- {"isexpand", "ise", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
- (char_u *)&p_ise, PV_ISE, did_set_isexpand, NULL,
- {(char_u *)"", (char_u *)0L}
- SCTX_INIT},
{"isfname", "isf", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
(char_u *)&p_isf, PV_NONE, did_set_isopt, NULL,
{
diff --git a/src/optionstr.c b/src/optionstr.c
index d5a81dd42..106e9003d 100644
--- a/src/optionstr.c
+++ b/src/optionstr.c
@@ -329,7 +329,6 @@ check_buf_options(buf_T *buf)
check_string_option(&buf->b_p_cinw);
check_string_option(&buf->b_p_cot);
check_string_option(&buf->b_p_cpt);
- check_string_option(&buf->b_p_ise);
#ifdef FEAT_COMPL_FUNC
check_string_option(&buf->b_p_cfu);
check_string_option(&buf->b_p_ofu);
@@ -2920,48 +2919,6 @@ did_set_imactivatekey(optset_T *args UNUSED)
}
#endif

-/*
- * The 'isexpand' option is changed.
- */
- char *
-did_set_isexpand(optset_T *args)
-{
- char_u *ise = p_ise;
- char_u *p;
- int last_was_comma = FALSE;
-
- if (args->os_flags & OPT_LOCAL)
- ise = curbuf->b_p_ise;
-
- for (p = ise; *p != NUL;)
- {
- if (*p == '\' && p[1] == ',')
- {
- p += 2;
- last_was_comma = FALSE;
- continue;
- }
-
- if (*p == ',')
- {
- if (last_was_comma)
- return e_invalid_argument;
- last_was_comma = TRUE;
- p++;
- continue;
- }
-
- last_was_comma = FALSE;
- MB_PTR_ADV(p);
- }
-
- if (last_was_comma)
- return e_invalid_argument;
-
- return NULL;
-}
-
-
/*
* The 'iskeyword' option is changed.
*/
diff --git a/src/po/vim.pot b/src/po/vim.pot
index a969a3517..09544a0c0 100644
--- a/src/po/vim.pot
+++ b/src/po/vim.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim
"
"Report-Msgid-Bugs-To: vim...@vim.org
"
-"POT-Creation-Date: 2025-11-27 20:24+0000
"
+"POT-Creation-Date: 2025-11-27 21:26+0000
"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE
"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>
"
"Language-Team: LANGUAGE <L...@li.org>
"
@@ -10442,9 +10442,6 @@ msgstr ""
msgid "specifies the characters in an identifier"
msgstr ""

-msgid "defines trigger strings for complete_match()"
-msgstr ""
-
msgid "specifies the characters in a keyword"
msgstr ""

diff --git a/src/proto/insexpand.pro b/src/proto/insexpand.pro
index bd84cb259..e973eac4f 100644
--- a/src/proto/insexpand.pro
+++ b/src/proto/insexpand.pro
@@ -69,7 +69,6 @@ int set_ref_in_insexpand_funcs(int copyID);
void f_complete(typval_T *argvars, typval_T *rettv);
void f_complete_add(typval_T *argvars, typval_T *rettv);
void f_complete_check(typval_T *argvars, typval_T *rettv);
-void f_complete_match(typval_T *argvars, typval_T *rettv);
void f_complete_info(typval_T *argvars, typval_T *rettv);
void ins_compl_delete(void);
void ins_compl_insert(int move_cursor, int insert_prefix);
diff --git a/src/proto/optionstr.pro b/src/proto/optionstr.pro
index e5af863cc..b60037024 100644
--- a/src/proto/optionstr.pro
+++ b/src/proto/optionstr.pro
@@ -104,7 +104,6 @@ char *did_set_highlight(optset_T *args);
int expand_set_highlight(optexpand_T *args, int *numMatches, char_u ***matches);
char *did_set_iconstring(optset_T *args);
char *did_set_imactivatekey(optset_T *args);
-char *did_set_isexpand(optset_T *args);
char *did_set_iskeyword(optset_T *args);
char *did_set_isopt(optset_T *args);
char *did_set_jumpoptions(optset_T *args);
diff --git a/src/structs.h b/src/structs.h
index 907d42165..3462aeca9 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -3345,7 +3345,6 @@ struct file_buffer
char_u *b_p_fo; // 'formatoptions'
char_u *b_p_flp; // 'formatlistpat'
int b_p_inf; // 'infercase'
- char_u *b_p_ise; // 'isexpand' local value
char_u *b_p_isk; // 'iskeyword'
#ifdef FEAT_FIND_ID
char_u *b_p_def; // 'define' local value
diff --git a/src/testdir/test_ins_complete.vim b/src/testdir/test_ins_complete.vim
index 194422b34..c2b8c67bc 100644
--- a/src/testdir/test_ins_complete.vim
+++ b/src/testdir/test_ins_complete.vim
@@ -4808,99 +4808,6 @@ func Test_nearest_cpt_option()
delfunc PrintMenuWords
endfunc

-func Test_complete_match()
- set isexpand=.,/,->,abc,/*,_
- func TestComplete()
- let res = complete_match()
- if res->len() == 0
- return
- endif
- let [startcol, expandchar] = res[0]
-
- if startcol >= 0
- let line = getline('.')
-
- let items = []
- if expandchar == '/*'
- let items = ['/** */']
- elseif expandchar =~ '^/'
- let items = ['/*! */', '// TODO:', '// fixme:']
- elseif expandchar =~ '^\.' && startcol < 4
- let items = ['length()', 'push()', 'pop()', 'slice()']
- elseif expandchar =~ '^\.' && startcol > 4
- let items = ['map()', 'filter()', 'reduce()']
- elseif expandchar =~ '^ bc'
- let items = ['def', 'ghk']
- elseif expandchar =~ '^\->'
- let items = ['free()', 'xfree()']
- else
- let items = ['test1', 'test2', 'test3']
- endif
-
- call complete(expandchar =~ '^/' ? startcol : startcol + strlen(expandchar), items)
- endif
- endfunc
-
- new
- inoremap <buffer> <F5> <cmd>call TestComplete()<CR>
-
- call feedkeys("S/*\<F5>\<C-Y>", 'tx')
- call assert_equal('/** */', getline('.'))
-
- call feedkeys("S/\<F5>\<C-N>\<C-Y>", 'tx')
- call assert_equal('// TODO:', getline('.'))
-
- call feedkeys("Swp.\<F5>\<C-N>\<C-Y>", 'tx')
- call assert_equal('wp.push()', getline('.'))
-
- call feedkeys("Swp.property.\<F5>\<C-N>\<C-Y>", 'tx')
- call assert_equal('wp.property.filter()', getline('.'))
-
- call feedkeys("Sp->\<F5>\<C-N>\<C-Y>", 'tx')
- call assert_equal('p->xfree()', getline('.'))
-
- call feedkeys("Swp->property.\<F5>\<C-Y>", 'tx')
- call assert_equal('wp->property.map()', getline('.'))
-
- call feedkeys("Sabc\<F5>\<C-Y>", 'tx')
- call assert_equal('abcdef', getline('.'))
-
- call feedkeys("S_\<F5>\<C-Y>", 'tx')
- call assert_equal('_test1', getline('.'))
-
- set ise&
- call feedkeys("Sabc \<ESC>:let g:result=complete_match()\<CR>", 'tx')
- call assert_equal([[1, 'abc']], g:result)
-
- call assert_fails('call complete_match(99, 0)', 'E966:')
- call assert_fails('call complete_match(1, 99)', 'E964:')
- call assert_fails('call complete_match(1)', 'E474:')
-
- set ise=你好,好
- call feedkeys("S你好 \<ESC>:let g:result=complete_match()\<CR>", 'tx')
- call assert_equal([[1, '你好'], [4, '好']], g:result)
-
- set ise=\,,->
- call feedkeys("Sabc, \<ESC>:let g:result=complete_match()\<CR>", 'tx')
- call assert_equal([[4, ',']], g:result)
-
- set ise=\ ,=
- call feedkeys("Sif true \<ESC>:let g:result=complete_match()\<CR>", 'tx')
- call assert_equal([[8, ' ']], g:result)
- call feedkeys("Slet a = \<ESC>:let g:result=complete_match()\<CR>", 'tx')
- call assert_equal([[7, '=']], g:result)
- set ise={,\ ,=
- call feedkeys("Sif true \<ESC>:let g:result=complete_match()\<CR>", 'tx')
- call assert_equal([[8, ' ']], g:result)
- call feedkeys("S{ \<ESC>:let g:result=complete_match()\<CR>", 'tx')
- call assert_equal([[1, '{']], g:result)
-
- bw!
- unlet g:result
- set isexpand&
- delfunc TestComplete
-endfunc
-
func Test_register_completion()
let @a = "completion test apple application"
let @b = "banana behavior better best"
diff --git a/src/testdir/util/gen_opt_test.vim b/src/testdir/util/gen_opt_test.vim
index 0c02d7d5e..eef332891 100644
--- a/src/testdir/util/gen_opt_test.vim
+++ b/src/testdir/util/gen_opt_test.vim
@@ -236,7 +236,6 @@ let test_values = {
\ 'helplang': [['', 'de', 'de,it'], ['xxx']],
\ 'highlight': [['', 'e:Error'], ['xxx']],
\ 'imactivatekey': [['', 'S-space'], ['xxx']],
- \ 'isexpand': [['', '.,->', '/,/*,\,'], [',,', '\,,']],
\ 'isfname': [['', '@', '@,48-52'], ['xxx', '@48']],
\ 'isident': [['', '@', '@,48-52'], ['xxx', '@48']],
\ 'iskeyword': [['', '@', '@,48-52'], ['xxx', '@48']],
diff --git a/src/version.c b/src/version.c
index 38609746c..27e71d493 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1933,
/**/
1932,
/**/
Reply all
Reply to author
Forward
0 new messages