【问题标题】:Make vim keyword completion menu show function parameters使vim关键字补全菜单显示函数参数
【发布时间】:2020-11-27 15:51:06
【问题描述】:

问题

我想让 vim keyword 补全菜单显示它向我建议的函数的参数。 我希望它看起来像这样:

这是使用 ctags 的全方位补全,它很棒但速度很慢,所以我不能将它与大型标签文件一起使用。

问题

这是我当前使用 ctags 完成关键字的样子 (set complete=t):

我的研究

我尝试查看 vim 的文档 (ins-completion, 'complete', 'completeopt', 'completefunc', 'omnifunc', 'ft-c-omni'),但实现目标的唯一方法似乎是编写我自己的 'completefunc' 我不想做的事情。

但是我发现我可以得到一个显示我想要的信息的弹出菜单,但是在我当前的配置 (set completeopt=menuone,noinsert,popup) 下它只显示在全能完成中,这又太慢了。

【问题讨论】:

  • 你试过 YouCompleteMe 插件吗?它在大型项目上运行得非常快,显示签名等等。 github.com/ycm-core/YouCompleteMe
  • 我知道 YouCompleteMe 但我从未尝试过,事实上我从未使用过任何插件,我喜欢 DYI 在​​ vi​​m 中做事的方式,我更喜欢极简主义而不是插件,尽管我承认它是既不是一种聪明的做事方式,也不是一种富有成效的做事方式。我找到了一种解决方法来实现我的目标,但这不是一个完美的解决方案,我会发布一个答案来展示它。
  • 更少的插件 - 更快的 vim,这是真的,尤其是对于慢速计算机。请记住,您有这样的选择)

标签: vim autocomplete


【解决方案1】:

我没有设法让 vim 关键字完成按我的意愿行事,所以我浏览了 vim 文档 (:h tag, popup, popup_atcursor),我得出的结论是创建自己的简单弹出窗口应该可以解决问题。

代码

" get the parameters of a function and put it in a popup using ctags
func GetFuncParamsFromTag()
    silent write
    " jump to tag under cursor
    silent execute "normal \<c-]>"
    " if there is '(' on the same line, it may be a function
    if search('(', "n") == winsaveview()["lnum"]
        " yank the function's name and parameters
        silent execute "normal v/)\<cr>y\<c-t>"
        " remove any previously present popup
        call popup_clear()
        " make the popup spawn above/below the cursor
        call popup_atcursor(getreg('0'), #{moved: [0, 80], highlight: 'WildMenu'})
    endif
endfunc

nnoremap <silent> <leader>? :call GetFuncParamsFromTag()<cr>

预览

看起来像这样:

您只需在普通模式下在函数名称上按&lt;leader&gt;?,您就会看到一个漂亮的小弹出窗口,仅显示函数的原型。

编辑:

当我使用 vim 补全时,我找到了一种解决方法。

autocmd CompleteDone * execute "normal ^,?" | call feedkeys("\<esc>:autocmd! InsertLeave * ++once call popup_clear()\<cr>A")

每当您完成一个单词时,此自动命令都会弹出一个弹出窗口,因此如果您键入 myImcompleteFunctionTag&lt;c-]&gt;&lt;c-y&gt;
它将完成您的标签,然后打开弹出窗口,并在行尾让您处于插入模式。 下次离开插入模式时,自动命令的其余部分会关闭弹出窗口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多