我怎么能做一个映射,将查找在php.net网页上的函数定义,并显示在Vim状态栏的结果?
要做到这一点需要几个步骤:
- 将函数名中的
_
替换为-
,以符合URL命名约定。编辑:不需要,如果你调用php.net/function_name
。 - 使用Vim
system()
函数调用wget并将结果存储在变量或寄存器中 - 使用hxnormalize 对wget的输出进行规范化
- 使用hxselect 选择特定的div
- 删除所有标签,如
<span>
,使用sed和正则表达式 - 如果找到,则返回结果,否则返回错误消息
这是将完成所有这些操作的映射(应该编辑为适合一行)
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>