runtime(help): add omni completion and 'iskeyword' to filetype plugin

Problem:

- Help tags provide a good way to navigate the Vim documentation, but
  many help documents don't use them effectively. I think one of the
  reasons is that help writers have to look up help tags manually with
  `:help` command, which is not very convenient.
- 'iskeyword' is only set for help buffers opened by `:help` command.
  That means if I'm editing a help file, I cannot jump to tag in same
  file using `Ctrl-]` unless I manually set it, which is annoying.

Solution:

- Add omni completion for Vim help tags.
- Set 'iskeyword' for `ft-help`

closes: #17073

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Phạm Bình An <phambinhanctb2004@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Phạm Bình An
2025-04-08 20:40:12 +02:00
committed by Christian Brabandt
parent 7517a8cadf
commit 0b540c6f38
3 changed files with 33 additions and 5 deletions

View File

@ -1,4 +1,4 @@
*helphelp.txt* For Vim version 9.1. Last change: 2025 Jan 11 *helphelp.txt* For Vim version 9.1. Last change: 2025 Apr 08
VIM REFERENCE MANUAL by Bram Moolenaar VIM REFERENCE MANUAL by Bram Moolenaar
@ -471,8 +471,13 @@ highlighting. So do these:
You can find the details in $VIMRUNTIME/syntax/help.vim You can find the details in $VIMRUNTIME/syntax/help.vim
GENDER NEUTRAL LANGUAGE FILETYPE COMPLETION *ft-help-omni*
To get completion for help tags when writing a tag reference, you can use the
|i_CTRL-X_CTRL-O| command.
GENDER NEUTRAL LANGUAGE
*gender-neutral* *inclusion* *gender-neutral* *inclusion*
Vim is for everybody, no matter race, gender or anything. For new or updated Vim is for everybody, no matter race, gender or anything. For new or updated
help text, gender neutral language is recommended. Some of the help text is help text, gender neutral language is recommended. Some of the help text is

View File

@ -7394,6 +7394,7 @@ ft-groff-syntax syntax.txt /*ft-groff-syntax*
ft-gsp-syntax syntax.txt /*ft-gsp-syntax* ft-gsp-syntax syntax.txt /*ft-gsp-syntax*
ft-hare filetype.txt /*ft-hare* ft-hare filetype.txt /*ft-hare*
ft-haskell-syntax syntax.txt /*ft-haskell-syntax* ft-haskell-syntax syntax.txt /*ft-haskell-syntax*
ft-help-omni helphelp.txt /*ft-help-omni*
ft-html-indent indent.txt /*ft-html-indent* ft-html-indent indent.txt /*ft-html-indent*
ft-html-omni insert.txt /*ft-html-omni* ft-html-omni insert.txt /*ft-html-omni*
ft-html-syntax syntax.txt /*ft-html-syntax* ft-html-syntax syntax.txt /*ft-html-syntax*

View File

@ -1,7 +1,8 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: Vim help file " Language: Vim help file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se> " Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2018-12-29 " Last Change: 2025 Apr 08
" 2025 Apr 08 by Vim project (set 'omnifunc' and 'iskeyword', #17073)
if exists("b:did_ftplugin") if exists("b:did_ftplugin")
finish finish
@ -11,12 +12,33 @@ let b:did_ftplugin = 1
let s:cpo_save = &cpo let s:cpo_save = &cpo
set cpo&vim set cpo&vim
let b:undo_ftplugin = "setl fo< tw< cole< cocu< keywordprg<" let b:undo_ftplugin = "setl isk< fo< tw< cole< cocu< keywordprg< omnifunc<"
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=s:HelpComplete
let &l:iskeyword='!-~,^*,^|,^",192-255'
if has("conceal") if has("conceal")
setlocal cole=2 cocu=nc setlocal cole=2 cocu=nc
endif endif
if !exists('*s:HelpComplete')
func s:HelpComplete(findstart, base)
if a:findstart
let colnr = col('.') - 1 " Get the column number before the cursor
let line = getline('.')
for i in range(colnr - 1, 0, -1)
if line[i] ==# '|'
return i + 1 " Don't include the `|` in base
elseif line[i] ==# "'"
return i " Include the `'` in base
endif
endfor
else
return taglist('^' .. a:base)
\ ->map({_, item -> #{word: item->get('name'), kind: item->get('kind')}})
\ ->extend(getcompletion(a:base, 'help'))
endif
endfunc
endif
let &cpo = s:cpo_save let &cpo = s:cpo_save
unlet s:cpo_save unlet s:cpo_save