Comment supprimer automatiquement la fenêtre d'aperçu après la saisie semi-automatique dans Vim?

91

J'utilise omnifunc=pythoncomplete. Lors de la saisie semi-automatique d'un mot (par exemple, os.<something>), j'obtiens la liste des membres de classe et des fonctions éligibles, comme prévu, ainsi qu'une fenêtre d'aperçu du tampon de travail avec la documentation sur le membre ou la fonction sélectionné. C'est génial, mais après avoir sélectionné la fonction que je veux, la fenêtre d'aperçu reste.

Je peux m'en débarrasser avec :pc, mais j'aimerais qu'il disparaisse automatiquement après avoir sélectionné ma fonction, à la Eclipse. J'ai joué avec completeoptmais en vain.

Ben Davini
la source
8
bonne question - j'ai arrêté d'utiliser omnicomplete car il laissait ce stupide tampon ouvert.
Wayne Werner

Réponses:

106

Mettez ce qui suit dans votre 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
la source
2
Cela semble casser la fenêtre d'édition de commande pour moi (q: ou q /). J'ai ajouté une autre vérification: && bufname ("%")! = "[Ligne de commande]" aux deux lignes
Ben
2
@Ben: Woah comment n'ai-je pas vu votre commentaire avant de poster cette question . La réponse que je suis de là allait changer pcloseà silent! pclose.
idbrii
1
Merci à la fois à gotgenes et à pydave. Vos astuces fonctionnent parfaitement!
Lubulos
73

Même s'il y a déjà une réponse acceptée, je l'ai trouvée directement à partir de la documentation qui fonctionnera pour tout plugin qui rencontre ce problème.

autocmd CompleteDone * pclose
Dan Bradbury
la source
15
CompleteDonea été ajouté dans la version 7.4. Cette méthode doit être préférée à CursorMovedI/ InsertLeaveapproche.
Peter Rincker
7
@PeterRincker Je préfère que la fenêtre ne se ferme pas à la fin (car je veux voir la documentation au fur et à mesure que je saisis les arguments), donc j'utiliserai la InsertLeaveligne.
DBedrenko
19

Si vous avez installé le plugin supertab, il existe une option appelée supertab-closepreviewonpopupclose .

Mettez ce qui suit dans votre .vimrc:

let g:SuperTabClosePreviewOnPopupClose = 1
Profpatsch
la source
16
Je vote pour cette réponse car c'est un indice que le plugin YouCompleteMe a l'option ag: ycm_autoclose_preview_window_after_insertion.
duleshi
@duleshi exactement ce que je cherchais!
Andy Hayden
@AndyHayden Heureux de pouvoir vous aider! C'est pour ça que j'ai laissé le commentaire!
duleshi
merci @duleshi c'est exactement ce dont j'avais besoin aussi!
David Woods
9

Je ne sais pas comment le fermer automatiquement, mais vous pouvez taper

: pclose

pour fermer l'aperçu du scratch manuellement.

Alan Dong
la source
1

Vous pouvez ajouter les mappages suivants pour que certaines touches essaient de fermer la fenêtre d'aperçu.

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>

Vous pouvez également utiliser des autocommandes pour fermer la fenêtre d'aperçu lorsque vous avez terminé en mode insertion:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end
trop de php
la source
1

Je sais que cette question est très ancienne, mais après des jours à chercher une solution "propre", je viens de trouver la fonction automatique CompleteDone qui fait le travail:

au CompleteDone * pclose
resi
la source
0

Vous pouvez taper cela dans le .vimrc:

set completeopt-=preview
messi
la source
Pouvez-vous vous en expliquer davantage?
Wtower
1
Cela ne répond pas réellement à la question, cela empêche la fenêtre de prévisualisation de s'afficher, de ne pas être fermée après la fin. Notez que l'OP a également dit avoir essayé «completeopt».
nerdwaller