如何使用viewdoc插件在Vim中使用pman和自定义帮助文件?

时间:2013-07-16 07:06:52

标签: vim vim-plugin

编辑PHP文件时,我想使用两个来源的帮助文件:

  • 来自here/etc/vim/bundle/yii-api-vim/doc/的vim帮助文件。
  • 包含pman
  • 的PHP手册页

如果帮助文件中没有可用的帮助,则应尝试pman

viewdoc插件的帮助声称

  

您可以为相同的文件类型提供多个文档源,并选择应该在运行中使用哪个文档源。

但它没有解释,如何做到这一点。接近的唯一功能是特定文件类型的处理程序,如ViewDoc_{filetype}(topic, filetype, synid, have_context)。但我不知道如何实现这样的功能。

向我提出的问题是:

  • 如果我的特定目录中存在*.txt文件,我该如何检查该函数?
  • 我应该返回什么,让viewdoc打开这样的帮助文件?
  • 我应该返回什么让viewdoc为普通的PHP函数打开pman页面?

查看此类函数的示例会很有帮助。

1 个答案:

答案 0 :(得分:3)

我不是vim脚本的专家,所以这可能不是一个理想的解决方案,但这对我有用。

首先在 viewdoc_pman.vim 文件中创建一个自定义viewdoc处理程序(如果你可以在〜/ .vim / bundle / viewdoc / plugin / 目录中找到它正在使用推荐的病原体安装)。

function ViewDoc_pman_custom(topic, filetype, synid, ctx)
  let l:tagpath = '/etc/vim/bundle/yii-api-vim/doc/tags'
  let l:shell = printf('grep %s %s', shellescape(a:topic,1), l:tagpath)
  let l:output = system(l:shell)

  if !v:shell_error
    return g:ViewDoc_help(a:topic, a:filetype, a:synid, a:ctx)
  else
    let l:ViewDoc_pman_old = function('ViewDoc_pman')
    return l:ViewDoc_pman_old(a:topic, a:filetype, a:synid, a:ctx)
  endif
endfunction

此函数使用 grep yii-api-vim 标记文件中查找指定的主题字符串。如果它在那里找到它,它只是将命令转发到默认的 ViewDoc_help 处理程序(这假设您已经安装了 yii-api-vim 文档,以便它可以工作正确使用标准帮助。)

如果 grep 没有找到任何内容,那么它将回退到调用 ViewDoc_pman 函数中的旧php处理程序。请注意,我们不能直接调用 g:ViewDoc_pman ,因为这是我们要覆盖的变量。我们需要使用function('ViewDoc_pman')获取旧函数的句柄,然后调用它。

最后,您需要找到以下两行:

let g:ViewDoc_pman = function('ViewDoc_pman')
let g:ViewDoc_php  = function('ViewDoc_pman')

用这两个替换它们:

let g:ViewDoc_pman = function('ViewDoc_pman_custom')
let g:ViewDoc_php  = function('ViewDoc_pman_custom')

这会强制所有php文档查询转发到我们的新自定义处理程序而不是旧的 ViewDoc_pman 函数。

如果您不想编辑 viewdoc_pman.vim 文件,可以将viewdoc处理程序放在 .vimrc 文件中。然后设置 g:ViewDoc_pman g:ViewDoc_php 变量,您需要添加以下行:

autocmd VimEnter * let g:ViewDoc_pman = function('ViewDoc_pman_custom')
autocmd VimEnter * let g:ViewDoc_php = function('ViewDoc_pman_custom')

autocmd VimEnter强制在所有插件加载后发生分配,否则这些变量将被插件覆盖,永远不会调用自定义处理程序。