在php.net上查找PHP函数,并在Vim状态栏中显示其定义


Lookup a PHP function at php.net and show the definition in Vim status bar

我怎么能做一个映射,将查找在php.net网页上的函数定义,并显示在Vim状态栏的结果?

要做到这一点需要几个步骤:

  1. 将函数名中的_替换为-,以符合URL命名约定。编辑:不需要,如果你调用php.net/function_name
  2. 使用Vim system()函数调用wget并将结果存储在变量或寄存器中
  3. 使用hxnormalize
  4. 对wget的输出进行规范化
  5. 使用hxselect
  6. 选择特定的div
  7. 删除所有标签,如<span>,使用sed和正则表达式
  8. 如果找到,则返回结果,否则返回错误消息

这是将完成所有这些操作的映射(应该编辑为适合一行)

vnoremap <leader>php :<c-u>let fn_name = substitute(@*, "_", "-", "g")<cr>
:let @a=system('wget -q -O - "php.net/manual/en/function.' . fn_name .  '.php" 
'| hxnormalize -l 240 -x 
'| hxselect ".dc-title" -c 
'| sed -e "s/<[^>]*>//g"')<cr>
: if @a != "" 
'| echom @a 
'| else 
'| echom "Could not find function " . fn_name
'| endif<cr>

您现在可以使用ve突出显示单词,然后打印<leader>php以获得函数定义。

OBS: +x11(如vim --version所示)是@*寄存器正常工作所必需的。

如果你不想依赖于有php.net可用,你可以使用Vim的php omni-complete, phpcomplete,而不是提供签名

将以下内容添加到~/.vim/after/php.vim文件中:

function! s:quick_man(word)
  if !exists('g:php_builtin_functions')
    call phpcomplete#LoadData()
  endif
  let word = a:word . '('
  echo word . get(g:php_builtin_functions, word, ' can not be found')
endfunction
nnoremap <buffer> K :call <SID>quick_man(expand('<cword>'))<cr>