neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit f3e2e718ec66e064b494b67ad90eadba69e00717
parent 90abd2613d7f8636b73d2f4084489b849cc16c69
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Wed,  4 Feb 2026 07:12:13 +0800

vim-patch:c65643c: runtime(vim): Update ftplugin, fix option variable 'keywordprg' matching

- Match &option, and &[lg]:option variables.
- Match Ex commands after :bar.
- Fix matching of pre and post context text.
- Style - use '..' for string concatenation.

fixes vim/vim#17567
closes: vim/vim#17653

https://github.com/vim/vim/commit/c65643cbec4f5a77a2d30232c64c258b5f0f5c09

Co-authored-by: Doug Kearns <dougkearns@gmail.com>

Diffstat:
Mruntime/ftplugin/vim.vim | 55++++++++++++++++++++++++++++---------------------------
1 file changed, 28 insertions(+), 27 deletions(-)

diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim @@ -1,11 +1,11 @@ " Vim filetype plugin " Language: Vim " Maintainer: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2025 Mar 05 " Former Maintainer: Bram Moolenaar <Bram@vim.org> -" Contributors: Riley Bruins <ribru17@gmail.com> ('commentstring'), +" Contributors: Riley Bruins <ribru17@gmail.com> ('commentstring') " @Konfekt " @tpope (s:Help()) +" Last Change: 2025 Aug 07 " 2025 Aug 16 by Vim Project set com depending on Vim9 or legacy script " 2026 Jan 26 by Vim Project set path to common Vim directories #19219 @@ -58,41 +58,42 @@ if !exists("*" .. expand("<SID>") .. "Help") function s:Help(topic) abort let topic = a:topic + " keyword is not necessarily under the cursor, see :help K + let line = getline('.') + let i = match(line, '\V' .. escape(topic, '\'), col('.') - len(topic)) + let pre = strpart(line, 0, i) + let post = strpart(line, i + len(topic)) + + " local/global option vars + if topic =~# '[lg]' && pre ==# '&' && post =~# ':\k\+' + let topic = matchstr(post, '\k\+') + endif + if get(g:, 'syntax_on', 0) let syn = synIDattr(synID(line('.'), col('.'), 1), 'name') if syn ==# 'vimFuncName' - return topic.'()' - elseif syn ==# 'vimOption' - return "'".topic."'" - elseif syn ==# 'vimUserAttrbKey' - return ':command-'.topic - elseif syn =~# 'vimCommand' - return ':'.topic + return topic .. '()' + elseif syn ==# 'vimOption' || syn ==# 'vimOptionVarName' + return "'" .. topic .. "'" + elseif syn ==# 'vimUserCmdAttrKey' + return ':command-' .. topic + elseif syn ==# 'vimCommand' + return ':' .. topic endif endif - let col = col('.') - 1 - while col && getline('.')[col] =~# '\k' - let col -= 1 - endwhile - let pre = col == 0 ? '' : getline('.')[0 : col] - - let col = col('.') - 1 - while col && getline('.')[col] =~# '\k' - let col += 1 - endwhile - let post = getline('.')[col : -1] - - if pre =~# '^\s*:\=$' - return ':'.topic + if pre =~# '^\s*:\=$' || pre =~# '\%(\\\||\)\@<!|\s*:\=$' + return ':' .. topic elseif pre =~# '\<v:$' - return 'v:'.topic + return 'v:' .. topic elseif pre =~# '<$' - return '<'.topic.'>' + return '<' .. topic .. '>' elseif pre =~# '\\$' - return '/\'.topic + return '/\' .. topic elseif topic ==# 'v' && post =~# ':\w\+' - return 'v'.matchstr(post, ':\w\+') + return 'v' .. matchstr(post, ':\w\+') + elseif pre =~# '&\%([lg]:\)\=$' + return "'" .. topic .. "'" else return topic endif