在Vim中自动完成后,如何自动删除预览窗口?


91

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

我可以使用摆脱它 :pc,但是我希望它在选择la la Eclipse函数之后自动消失。我玩过,completeopt但无济于事。


8
好问题-我停止使用omnicomplete,因为它打开了那个愚蠢的缓冲区。
韦恩·沃纳

Answers:


106

将以下内容放入您的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

2
这似乎破坏了我的命令编辑窗口(q:或q /)。我在两行中添加了另一项检查:&& bufname(“%”)!=“” [命令行]“
2012年

2
@Ben:哇,在发布此问题之前,我怎么没看到您的评论。我从那里得到的答案是更改pclosesilent! pclose
idbrii

1
多亏了getgenes和pydave。您的技巧将完美发挥作用!
Lubulos 2012年

73

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

autocmd CompleteDone * pclose

15
CompleteDone在7.4版中添加。此方法应优先于CursorMovedI/ InsertLeave方法。
彼得·林克

7
@PeterRincker我希望窗口不要在完成时关闭(因为我想在输入参数时查看文档),所以我将使用该InsertLeave行。
DBedrenko 2015年

19

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

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

let g:SuperTabClosePreviewOnPopupClose = 1

16
我赞成这个答案,因为它暗示YouCompleteMe插件具有ag:ycm_autoclose_preview_window_after_insertion选项。
duleshi

@duleshi正是我想要的!
安迪·海登

@AndyHayden很高兴我可以帮忙!这就是我留下的评论!
duleshi 2014年

谢谢@duleshi,这正是我所需要的!
戴维·伍兹

9

我不知道如何自动关闭它,但是您可以输入

:pclose

手动关闭暂存预览。


1

您可以抛出以下映射,以使某些键尝试关闭预览窗口。

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

1

我知道这个问题很老,但是在寻找“干净”解决方案几天后,我才发现可以完成此工作的CompleteDone自动功能:

au CompleteDone * pclose

0

您可以在中输入.vimrc

set completeopt-=preview

you,请您介意解释更多?
Wtower '16

1
这实际上并没有回答问题,这使预览窗口不会弹出,在完成后不会被关闭。请注意,OP确实说过他们也尝试过“ completeopt”。
nerdwaller
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.