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.


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

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

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

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.


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

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

0

Você pode digitar isso no .vimrc:

set completeopt-=preview

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.