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.


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

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

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

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.


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

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

0

Vous pouvez taper cela dans le .vimrc:

set completeopt-=preview

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.