【问题标题】:How do you automatically remove the preview window after autocompletion in Vim?在 Vim 中自动完成后如何自动删除预览窗口?
【发布时间】:2011-03-07 12:37:54
【问题描述】:

我正在使用omnifunc=pythoncomplete。当自动完成一个单词(例如,os.<something>)时,我得到了符合条件的类成员和函数的列表,正如预期的那样,以及一个包含有关所选成员或函数的文档的暂存缓冲区预览窗口。这很好,但是在选择了我想要的功能后,预览窗口仍然存在。

我可以用:pc 摆脱它,但我希望它在我选择了我的功能后自动消失,就像 Eclipse。我玩过completeopt,但无济于事。

【问题讨论】:

  • 好问题 - 我停止使用omnicomplete,因为它打开了那个愚蠢的缓冲区。

标签: vim autocomplete preview


【解决方案1】:

您可以在.vimrc 中输入:

set completeopt-=preview

【讨论】:

  • 请您解释一下?
  • 这实际上并没有回答问题,这使预览窗口永远不会弹出,完成后不会被关闭。请注意,OP 确实说他们也尝试过“completeopt”。
【解决方案2】:

我知道这个问题已经很老了,但是在寻找“干净”解决方案几天后,我刚刚找到了完成这项工作的 CompleteDone 自动功能:

au CompleteDone * pclose

【讨论】:

    【解决方案3】:

    即使已经有一个可接受的答案,我还是直接从文档中找到了这个答案,该答案适用于任何存在此问题的插件。

    autocmd CompleteDone * pclose
    

    【讨论】:

    • CompleteDone 是在 7.4 版中添加的。这种方法应该优于CursorMovedI/InsertLeave 方法。
    • @PeterRincker 我更喜欢窗口在完成时不要关闭(因为我想在输入参数时查看文档),所以我将使用InsertLeave 行。跨度>
    • 这太棒了:)
    【解决方案4】:

    不知道怎么自动关闭,但是你可以输入

    :p关闭

    手动关闭草稿预览。

    【讨论】:

      【解决方案5】:

      如果您安装了 supertab 插件,则有一个名为 supertab-closepreviewonpopupclose 的选项。

      将以下内容放入您的 .vimrc 中:

      let g:SuperTabClosePreviewOnPopupClose = 1
      

      【讨论】:

      • 我赞成这个答案,因为它暗示 YouCompleteMe 插件有一个 g:ycm_autoclose_preview_window_after_insertion 选项。
      • @duleshi 正是我想要的!
      • @AndyHayden 很高兴我能帮上忙!这就是我留下评论的原因!
      • 谢谢@duleshi,这正是我所需要的!
      【解决方案6】:

      将以下内容放入您的 vimrc 中:

      " If you prefer the Omni-Completion tip window to close when a selection is
      " made, these lines close it on movement in insert mode or when leaving
      " insert mode
      autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
      autocmd InsertLeave * if pumvisible() == 0|pclose|endif
      

      【讨论】:

      • 这似乎打破了我的命令编辑窗口(q: 或 q/)。我添加了另一个检查: && bufname("%") != "[Command Line]" 到两行
      • @Ben:哇,在发布this question 之前我怎么没看到你的评论。我从那里得到的答案是将pclose 更改为silent! pclose
      • 感谢 gotgenes 和 pydave。你的把戏完美无缺!
      【解决方案7】:

      您可以输入以下映射以使某些键尝试关闭预览窗口。

      inoremap <space> <C-O>:wincmd z<CR><space>
      inoremap ( <C-O>:wincmd z<CR>(
      inoremap ) <C-O>:wincmd z<CR>)
      inoremap , <C-O>:wincmd z<CR>,
      inoremap <CR> <C-O>:wincmd z<CR><CR>
      inoremap <esc> <esc>:wincmd z<CR>
      

      您也可以在插入模式下完成后使用自动命令关闭预览窗口:

      augroup GoAwayPreviewWindow
      autocmd! InsertLeave * wincmd z
      augroup end
      

      【讨论】:

        猜你喜欢
        • 2015-09-30
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2018-11-25
        相关资源
        最近更新 更多