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

Commit: 
https://github.com/vim/vim/commit/c65643cbec4f5a77a2d30232c64c258b5f0f5c09
Author: Doug Kearns <dougkea...@gmail.com>
Date:   Sat Aug 9 23:41:21 2025 +0200

    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 #17567
    closes: #17653
    
    Signed-off-by: Doug Kearns <dougkea...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim
index 5ee3812b4..fa2135eb4 100644
--- a/runtime/ftplugin/vim.vim
+++ b/runtime/ftplugin/vim.vim
@@ -1,8 +1,9 @@
 " Vim filetype plugin
 " Language:          Vim
 " Maintainer:        Doug Kearns <dougkea...@gmail.com>
+" Last Change:       2025 Aug 07
 " Former Maintainer: Bram Moolenaar <b...@vim.org>
-" Contributors:      Riley Bruins <ribr...@gmail.com> ('commentstring'),
+" Contributors:      Riley Bruins <ribr...@gmail.com> ('commentstring')
 "                    @Konfekt
 "                    @tpope (s:Help())
 "                    @lacygoill
@@ -62,41 +63,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

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1ukrNF-005BAF-09%40256bit.org.

Raspunde prin e-mail lui