Vim - mysqli 函数与 phpcomplete

Vim - mysqli functions with phpcomplete

我安装了 phpcomplete.vim 和 Vundle,希望我能自动完成 PHP。

然而只出现了几个mysqli函数。甚至 mysqli_connect() 都没有出现。

是我哪里做错了还是这些功能没有实现?我可以用其他插件或其他东西获得它们吗?

编辑:此 post 讨论 Vim 7.4 附带的 phpcomplete.vim 版本。有问题的版本是shawncplus的版本:phpcomplete.vim。我强烈建议升级到使用 shawncplus 版本,因为它更完整(双关语!)。

旧phpcomplete.vim

遗憾的是 php Vim 附带的完整功能没有很多常用功能,例如json_decode。我自己添加了补全条目。

将以下内容添加到 ~/.vim/after/ftplugin/php.vim

if !exists('g:php_builtin_functions')
  call phpcomplete#LoadData()
  let g:php_builtin_functions['json_decode('] = 'string $json [, bool $assoc [, int $depth [, int $options]]] | mixed'
  let g:php_builtin_functions['json_encode('] = 'mixed $value [, int $options [, int $depth]] | string'
  let g:php_builtin_functions['json_last_error_msg('] = 'void | string'
  let g:php_builtin_functions['json_last_error('] = 'void | int'
endif

注意:我的示例只是添加了 JSON 函数。您需要为您的 mysqli 函数更改这些。

这里的奖励是我用于 php 文件的 K 命令版本(放入 ~/.vim/after/ftplugin/php.vim):

function! s:PHPQuickMan(word)
  let word = a:word . '('
  echo word . get(g:php_builtin_functions, word, ' can not be found')
endfunction

nnoremap <buffer> K :call <SID>PHPQuickMan(expand('<cword>'))<cr>

问题似乎是内置的 function/class maps (caution, it's a pretty big file) does not contain the every mysqli_* function, like the mysql_connect(有些功能像 mysqli_get_cache_stats)。

根本原因可能是 due to the code which generates these maps from the docs and in this case it's probably a bug / lack of support for these kind of aliases (like mysqli_connect) and functions those can be called both procedural and via the various mysqli related classes (like mysqli_close).

如果您使用的是插件的 github 主版本,您可以通过 misc/builtin_manual.vim 文件手动添加条目,它看起来像这样(只需将其添加到文件末尾):

call extend(g:phpcomplete_builtin['functions']['mysqli'], {
\ 'mysqli_connect(': '[ string $host = ini_get("mysqli.default_host") [, string $username = ini_get("mysqli.default_user") [, string $passwd = ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket = ini_get("mysqli.default_socket") ]]]]]] | mysqli',
\ 'mysqli_escape_string(': 'string $escapestr | string',
\ 'mysqli_execute(': ' mysqli_stmt $stmt | bool',
\ 'mysqli_set_opt(': ' mysqli $link, int $option, mixed $value | bool',
\ })

只需添加更多您希望在结果中看到的内容。

如果您想使用内置地图(我写这篇文章时它们已经 10 个月没有更新了),您可以在 here, you'll need the docs from php.net 和命令行 [=40= 中找到生成器].

如果你能在 github 上开一个 issue,我将不胜感激,这样我们就可以有一个合适的地方进行讨论等等。

更新:

我已经 pushed a commit 更新了内置地图并支持生成器中的“程序样式”别名。