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 更新了内置地图并支持生成器中的“程序样式”别名。
我安装了 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 更新了内置地图并支持生成器中的“程序样式”别名。