Como você remove automaticamente a janela de visualização após o preenchimento automático no Vim?

91

Estou usando omnifunc=pythoncomplete. Ao preencher automaticamente uma palavra (por exemplo, os.<something>), obtenho a lista de membros da classe e funções elegíveis, conforme esperado, bem como uma janela de visualização do buffer de trabalho com documentação sobre o membro ou função selecionada. Isso é ótimo, mas após selecionar a função que desejo, a janela de visualização permanece.

Posso me livrar dele com :pc, mas gostaria que simplesmente desaparecesse automaticamente depois de selecionar minha função, a la Eclipse. Eu brinquei com, completeoptmas sem sucesso.

Ben Davini
fonte
8
boa pergunta - parei de usar o omnicomplete porque ele deixou aquele buffer estúpido aberto.
Wayne Werner

Respostas:

106

Coloque o seguinte em seu 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
Gotgenes
fonte
2
Isso parece quebrar a janela de edição de comandos para mim (q: ou q /). Eu adicionei outra verificação: && bufname ("%")! = "[Linha de Comando]" em ambas as linhas
Ben
2
@Ben: Woah, como não vi seu comentário antes de postar essa pergunta . A resposta que recebi foi mudar pclosepara silent! pclose.
idbrii
1
Graças a gotgenes e pydave. Seus truques funcionam perfeitamente!
Lubulos
73

Mesmo que já haja uma resposta aceita, encontrei isso diretamente nos documentos, o que funcionará com qualquer plugin que esteja tendo esse problema.

autocmd CompleteDone * pclose
Dan Bradbury
fonte
15
CompleteDonefoi adicionado na versão 7.4. Este método deve ser preferido sobre CursorMovedI/ InsertLeaveabordagem.
Peter Rincker
7
@PeterRincker Eu prefiro que a janela não feche na conclusão (porque quero ver a documentação enquanto digito os argumentos), então usarei a InsertLeavelinha.
DBedrenko
19

Se você tiver o plugin supertab instalado, existe uma opção chamada supertab-closepreviewonpopupclose.

Coloque o seguinte em seu .vimrc:

let g:SuperTabClosePreviewOnPopupClose = 1
Profpatsch
fonte
16
Votei positivamente nesta resposta porque é uma dica de que o plugin YouCompleteMe tem a opção ag: ycm_autoclose_preview_window_after_insertion.
duleshi
@duleshi exatamente o que eu estava procurando!
Andy Hayden
@AndyHayden Que bom que posso ajudar! Foi por isso que deixei o comentário!
duleshi de
obrigado @duleshi era exatamente o que eu precisava também!
David Woods
9

Não sei como fechá-lo automaticamente, mas você pode digitar

: pclose

para fechar a visualização do scratch manualmente.

Alan dong
fonte
1

Você pode adicionar os seguintes mapeamentos para que certas teclas tentem fechar a janela de visualização.

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>

Você também pode usar comandos automáticos para fechar a janela de visualização quando terminar no modo de inserção:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end
muito php
fonte
1

Sei que essa pergunta é muito antiga, mas depois de dias procurando uma solução "limpa", acabei de encontrar a autofunção CompleteDone que faz o trabalho:

au CompleteDone * pclose
resi
fonte
0

Você pode digitar isso no .vimrc:

set completeopt-=preview
messi
fonte
Poderia explicar mais?
Wtower
1
Na verdade, isso não responde à pergunta, evita que a janela de visualização apareça, não sendo descartada após a conclusão. Observe que o OP disse que eles tentaram "completeopt" também.
nerdwaller