-
-
Notifications
You must be signed in to change notification settings - Fork 6.3k
[RFC] Set 'keywordprg' for vim and help filetypes. #3104
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] Set 'keywordprg' for vim and help filetypes. #3104
Conversation
I guess this should have the |
I would prefer this behaviour from tpope/vim-scriptease as a default for vim files. |
Yeah, I was thinking scriptease should be a default plugin, actually. (Please don't send a PR for that, though...) @vheon Any reason this PR would be a problem in the meantime? If users have scripttease they won't notice, and users that don't have scriptease get some benefit. |
What does that scriptease snippet actually do? It wasn't immediately obvious to me. |
@Renstrom It adjusts the help-topic depending on what's under the cursor. |
Ah, so it's just a bit more intelligent than this solution? |
This should be mentioned in Besides that I've used this for a while, and while it mostly works fine I've always had the following issue:
I just tried |
@pyrohh It's weird you had to do that, since the help on 'iskeyword' says:
I think that is not true. |
In the case of using the scriptease version, where would one put the |
I would suggest you put it in some file in You'll also need to modify it so it can work standalone, as it stands it uses some other stuff from scriptease. |
949e950
to
34b9794
Compare
Ported the functionality from vim-scriptease. |
runtime/autoload/help.vim
Outdated
return reverse(map(synstack(line, col), 'synIDattr(v:val,"name")')) | ||
endfunction | ||
|
||
function! HelpTopic() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since you are using autoload file you must use help#topic()
(help
is because file is named {rtp}/autoload/help.vim
).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also missing abort
.
@neovim/core Also what about tests? In #3270 I assumed that it is bad idea to add any code without testing and put tests for runtime files into test/functional/plugin. I think it is needed to establish an agreement on this matter. E.g. for this issue it needs to test that |
runtime/autoload/help.vim
Outdated
let post = getline('.')[col : -1] | ||
let syn = get(synnames(), 0, '') | ||
let cword = expand('<cword>') | ||
if syn ==# 'vimFuncName' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The entire function is for .vim
files: this and the following conditions will never match in a help file. I think this needs to be altered: topic for functions should be opened if current word is immediately followed by a parenthesis in addition to syn
check.
runtime/autoload/help.vim
Outdated
return ':'.cword | ||
elseif pre =~# '\<v:$' | ||
return 'v:'.cword | ||
elseif cword ==# 'v' && post =~# ':\w\+' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same.
By the way, why using |
Yes, we prefer tests. And |
eaa1533
to
ce6d317
Compare
Open the Vim help file instead of 'man' when pressing 'K' in normal mode. Credits to Tim Pope for the original implementation in vim-scriptease.
759316d
to
a13ea1d
Compare
I tried to address some comments and rebased since this was two years old. Unfortunately I'm quite bad a Vimscript. |
runtime/autoload/help.vim
Outdated
return "'" . cword . "'" | ||
elseif pre =~# '&$' || pre =~# '&[lg]:$' | ||
return "'" . cword . "'" | ||
elseif pre =~# 'set\s\+$' || pre =~# '\vsetl(ocal)?\s+$' || pre =~# '\vsetg(lobal)?\s+$' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This matches setl
and setlocal
, but not setloc
. Use this instead:
elseif pre =~# '\vset?\s+$' || pre =~# '\vsetl%[ocal]\s+$' || pre =~# '\vsetg%[lobal]\s+$'
endif | ||
let g:loaded_help = 1 | ||
|
||
function! help#topic() abort |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this function obvious enough that it doesn't need a comment? I'm too green to judge. Would it qualify as obvious if it had tests?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Honestly, I barely know myself since this was blatantly copied from https://github.com/tpope/vim-scriptease/blob/59a73a2415ea1b006ae3e91163ddde24e8540844/autoload/scriptease.vim#L693-L723. Initially this pull request only contained a simple keywordprg=:help
, but then it was suggested to use vim-scriptease's more intelligent lookup.
But in short, this function looks at the word under the cursor (e.g. what syntax group it has), and on the word(s) coming before and after.
Contrary to #3104 (comment) I think it's now a good time to include scriptease as a standard plugin. @tpope do you have any objection to that? |
What does it really mean to include as a standard plugin? |
@Renstrom It means include the plugin in |
6720fe2 includes a minimal version of this change. A new PR including |
No objection. I would recommend sticking to stable releases rather than tracking master, though with Neovim still in development maybe that doesn't matter. |
Neovim is indeed in development and here we at least wait for CI before merging patches, so I would rather suggest master. |
FEATURES: 0e873a3 Lua(Jit) built-in neovim#4411 5b32bce Windows: `:terminal` neovim#7007 7b0ceb3 UI/API: externalize cmdline neovim#7173 b67f58b UI/API: externalize wildmenu neovim#7454 b23aa1c UI: 'winhighlight' neovim#6597 17531ed UI: command-line coloring (`:help input()-highlight`) neovim#6364 244a1f9 API: execute lua directly from the remote api neovim#6704 45626de API: `get_keymap()` neovim#6236 db99982 API: `nvim_get_hl_by_name()`, `nvim_get_hl_by_id()` neovim#7082 dc68538 menu_get() function neovim#6322 9db42d4 :cquit : take an error code argument neovim#7336 9cc185d job-control: serverstart(): support ipv6 neovim#6680 1b7a9bf job-control: sockopen() neovim#6594 6efe84a clipboard: fallback to tmux clipboard neovim#6894 6016ac2 clipboard: customize clipboard with `g:clipboard` neovim#6030 3a86dd5 ruby: override ruby host via `g:ruby_host_prog` neovim#6841 16cce1a debug: $NVIM_LOG_FILE neovim#6827 0cba3da `:checkhealth` built-in, validates $VIMRUNTIME neovim#7399 FIXES: 105d680 TUI: more terminals, improve scroll/resize neovim#6816 cb912a3 :terminal : handle F1-F12, other keys neovim#7241 619838f inccommand: improve performance neovim#6949 04b3c32 inccommand: Fix matches for zero-width neovim#7487 60b1e8a inccommand: multiline, other fixes neovim#7315 f1f7f3b inccommand: Ignore leading modifiers in the command neovim#6967 1551f71 inccommand: fix 'gdefault' lockup neovim#7262 6338199 API: bufhl: support creating new groups neovim#7414 541dde3 API: allow K_EVENT during operator-pending 8c732f7 terminal: adjust for 'number' neovim#7440 5bec946 UI: preserve wildmenu during jobs/events neovim#7110 c349083 UI: disable 'lazyredraw' during ui_refresh. neovim#6259 51808a2 send FocusGained/FocusLost event instead of pseudokey neovim#7221 133f8bc shada: preserve unnamed register on restart neovim#4700 1b70a1d shada: avoid assertion on corrupt shada file neovim#6958 9f534f3 mksession: Restore tab-local working directory neovim#6859 de1084f fix buf_write() crash neovim#7140 7f76986 syntax: register 'Normal' highlight group neovim#6973 6e7a8c3 RPC: close channel if stream was closed neovim#7081 85f3084 clipboard: disallow recursion; show hint only once neovim#7203 8d1ccb6 clipboard: performance, avoid weird edge-cases neovim#7193 01487d4 'titleold' neovim#7358 01e53a5 Windows: better path-handling, separator (slash) hygiene neovim#7349 0f2873c Windows: multibyte startup arguments neovim#7060 CHANGES: 9ff0cc7 :terminal : start in normal-mode neovim#6808 032b088 lower priority of 'cursorcolumn', 'colorcolumn' neovim#7364 2a3bcd1 RPC: Don't delay notifications when request is pending neovim#6544 023f67c :terminal : Do not change 'number', 'relativenumber' neovim#6796 1ef2d76 socket.c: Disable Nagle's algorithm on TCP sockets neovim#6915 6720fe2 help: `K` tries Vim help instead of manpage neovim#3104 7068370 help, man.vim: change "outline" map to `gO` neovim#7405
Open the Vim help file instead of
man
when pressing K in normal mode.