If I am coding in PHP and I type out a PHP built-in function (e.g. explode()
) vims standard omni-complete would normally provide a function signature in a preview window.
I recently installed a couple of plugins and now the function signature preview doesnt seem to work, is there any way to manually invoke this preview window with function signature?
Add a comment
|
1 Answer
In theory you could go to the end of the function and and press <c-x><c-o>
if 'completeopt'
has menuone
set. However this will add an extra paren at the end of the function.
I use the following snippet in my ~/.vim/after/ftplugin/php.vim
file:
function! s:PHPQuickMan(word)
if !exists('g:php_builtin_functions')
call phpcomplete#LoadData()
endif
let word = a:word . '('
if !get(b:, 'php_quick_man_color', get(g:, 'php_quick_man_color', 1))
echo word . get(g:php_builtin_functions, word, ' can not be found')
else
let sig = get(g:php_builtin_functions, word, '')
if sig == ''
echohl WarningMsg
echo word . ' can not be found'
echohl None
else
echon word
for part in split(matchstr(sig, '.*\ze|\s\+\w\+$'), '\<')
echohl Directory
let w = matchstr(part, '\v^(int|array|mixed|callable|object|string|bool|void|resource)')
echon w
echohl None
echon strpart(part, len(w))
endfor
echon ") | "
echohl WarningMsg
echon matchstr(sig, '|\s\+\zs\w\+$')
echohl None
endif
endif
endfunction
nnoremap <buffer> K :call <SID>PHPQuickMan(expand('<cword>'))<cr>
This leverages the php's omni-complete database to print out at the bottom of the screen the function signature when you press K
on a function.
For more help see:
:h 'completeopt'
:h compl-omni
:h i_CTRL-X_CTRL-O
:h K
:h 'keywordprg'
-
awesome, thanks for this! I can get it to work for straight functions, but not for methods, e.g. it doesnt work on
$dbh->prepare($sql)
whereas vims builtin omni complete does provide assistance forprepare()
- when its called on an object (but wont if its not used in an object context) Commented Oct 8, 2015 at 19:05 -
I should have been more clear it uses Vim builtin omni complete for functions via
g:php_builtin_functions
. Commented Oct 8, 2015 at 19:59 -
thats the weird thing, vim's builtin onmi-complete - for methods - does work, but when I invoke the method signature with your snippet it doesnt work. just to repeat: you snippet works fine on builtin functions - its just methods that dont seem to work Commented Oct 9, 2015 at 2:35
-
Since the snippet uses
g:php_builtin_functions
it has no support for methods, just functions. Please feel free to improve upon it to work for methods calls Commented Oct 9, 2015 at 14:15