Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vim中自动完成后自动删除预览窗口?_Vim_Autocomplete_Preview - Fatal编程技术网

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

如何在Vim中自动完成后自动删除预览窗口?,vim,autocomplete,preview,Vim,Autocomplete,Preview,我使用的是omnifunc=pythoncomplete。当自动完成一个单词(例如,os.)时,我会得到符合条件的类成员和函数的列表,正如预期的那样,还有一个包含所选成员或函数文档的scratch buffer预览窗口。这很好,但是在选择了我想要的功能之后,预览窗口仍然存在 我可以用:pc摆脱它,但我希望它在我选择了我的函数la Eclipse之后自动消失。我已经使用了completeopt,但是没有用。您可以加入以下映射,让某些键尝试关闭预览窗口 inoremap <space>

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


我可以用
:pc
摆脱它,但我希望它在我选择了我的函数la Eclipse之后自动消失。我已经使用了
completeopt
,但是没有用。

您可以加入以下映射,让某些键尝试关闭预览窗口

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>

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

如果已安装supertab插件,则有一个名为
supertab ClosePreviewWonPopupClose
的选项

将以下内容放入.vimrc中:

let g:SuperTabClosePreviewOnPopupClose = 1

我不知道如何自动关闭它,但你可以键入

:pclose


手动关闭草稿预览

尽管已经有了一个公认的答案,但我还是直接从文档中找到了这个答案,这将适用于任何存在此问题的插件

autocmd CompleteDone * pclose

我知道这个问题很老了,但在寻找“干净”的解决方案几天后,我发现了完成这项工作的CompleteDone autofunction:

au CompleteDone * pclose

您可以在
.vimrc
中键入:

set completeopt-=preview

好问题-我停止使用omnicomplete,因为它让那个愚蠢的缓冲区打开了。这似乎打破了我的命令编辑窗口(q:或q/)。我又加了一张支票:&&bufname(“%”)=“[命令行]”同时指向lines@Ben:哇,我怎么没有看到你在发布之前的评论。我从那里得到的答案是将
pclose
更改为
静音!pclose
。多亏了gotgenes和pydave。你的把戏很管用!我支持这个答案,因为它暗示YouCompleteMe插件有一个g:ycm\u autoclose\u preview\u window\u after\u insert选项。@duleshi正是我想要的@我很高兴能帮上忙!这就是我留下评论的原因!谢谢@duleshi这正是我所需要的<7.4版中添加了代码>CompleteDone。此方法应优先于
CursorMovedI
/
InsertLeave
方法。@PeterRincker我希望窗口在完成时不要关闭(因为我想在输入参数时查看文档),因此,我将使用
InsertLeave
行。这是令人惊讶的:)你能解释更多吗?这实际上并没有回答问题,这可以防止预览窗口弹出,完成后不会被取消。请注意,OP确实表示他们也尝试了“completeopt”。
set completeopt-=preview