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

标签 vim vim-plugin

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

  • vim 帮助文件位于 /etc/vim/bundle/yii-api-vim/doc/来自 here .
  • PHP 手册页 pman

  • 如果帮助文件中没有可用的帮助,它应该尝试 pman .

    viewdoc 插件的帮助声称

    You can have several documentation sources for same file type, and choose which one should be used on-the-fly.



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

    对我开放的问题是:
  • 如果 *.txt,我如何检查该函数内部文件存在于我的特定目录中吗?
  • 我应该返回什么让viewdoc如果存在这样的帮助文件,请打开它?
  • 我应该返回什么让viewdoc开一个 pman普通 PHP 函数的页面?

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

    最佳答案

    我不是 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强制分配在所有插件加载后发生,否则这些变量将被插件覆盖并且永远不会调用您的自定义处理程序。

    关于vim - 如何通过 viewdoc 插件在 Vim 中使用 pman 和自定义帮助文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17670134/

    相关文章:

    vim - 在正常模式下按 “o” 或 “O"时自动插入注释

    python - Vim :E523: Not allowed here

    intellij-idea - 在 ideavim 插入模式下绑定(bind)到 Action

    regex - 如何在vim中将带大括号的文本分配给变量

    VIM:标记的命名空间

    以 "path agnostic"方式从vim编译C文件

    c - 当函数定义包含 `fold-create-marker` 时,默认 `{{{` 标记的 `*` 无法正常工作

    vim - 如何在不打开窗口的情况下添加到 Vim 搜索历史记录?

    Vim 中未启用 Python

    go - 安装 nvim-go 失败并显示 "Undefined variable: g:go#debug"