Come rimuovi automaticamente la finestra di anteprima dopo il completamento automatico in Vim?


91

Sto usando omnifunc=pythoncomplete. Quando si completa automaticamente una parola (ad es. os.<something>), Ottengo l'elenco dei membri e delle funzioni della classe idonei, come previsto, nonché una finestra di anteprima del buffer di memoria virtuale con la documentazione sul membro o sulla funzione selezionata. Questo è fantastico, ma dopo aver selezionato la funzione che desidero, la finestra di anteprima rimane.

Posso sbarazzarmene con :pc, ma vorrei che scomparisse automaticamente dopo aver selezionato la mia funzione, alla Eclipse. Ci ho giocato completeoptma senza successo.


8
bella domanda - ho smesso di usare omnicomplete perché ha lasciato aperto quello stupido buffer.
Wayne Werner

Risposte:


106

Metti quanto segue nel tuo 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
Questo sembra interrompere la finestra di modifica del comando per me (q: o q /). Ho aggiunto un altro segno di spunta: && bufname ("%")! = "[Command Line]" a entrambe le righe
Ben

2
@ Ben: Woah come ho fatto a non vedere il tuo commento prima di postare questa domanda . La risposta che ho ricevuto da quello che c'era da cambiare pclosea silent! pclose.
idbrii

1
Grazie a Gotgenes e Pydave. I tuoi trucchi funzionano perfettamente!
Lubulos

73

Anche se esiste già una risposta accettata, l'ho trovata direttamente dalla documentazione che funzionerà per qualsiasi plug-in che presenta questo problema.

autocmd CompleteDone * pclose

15
CompleteDoneè stato aggiunto nella versione 7.4. Questo metodo dovrebbe essere preferito rispetto a CursorMovedI/ InsertLeaveapproccio.
Peter Rincker

7
@PeterRincker Preferisco che la finestra non si chiuda al termine (perché voglio vedere la documentazione mentre sto digitando gli argomenti), quindi userò la InsertLeaveriga.
DBedrenko

19

Se hai installato il plugin supertab, c'è un'opzione chiamata supertab-closepreviewonpopupclose .

Inserisci quanto segue nel tuo .vimrc:

let g:SuperTabClosePreviewOnPopupClose = 1

16
Voto a favore di questa risposta perché è un suggerimento che il plugin YouCompleteMe ha un'opzione ag: ycm_autoclose_preview_window_after_insertion.
duleshi

@duleshi esattamente quello che stavo cercando!
Andy Hayden

@ AndyHayden Sono contento di poter aiutare! È per questo che ho lasciato il commento!
duleshi

grazie @duleshi, è esattamente quello di cui avevo bisogno!
David Woods

9

Non so come chiuderlo automaticamente, ma puoi digitare

: pclose

per chiudere manualmente l'anteprima di scratch.


1

È possibile inserire le seguenti mappature per fare in modo che alcuni tasti provino a chiudere la finestra di anteprima.

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>

Puoi anche usare i comandi automatici per chiudere la finestra di anteprima quando hai finito in modalità di inserimento:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end

1

So che questa domanda è molto vecchia, ma dopo giorni passati alla ricerca di una soluzione "pulita" ho appena trovato l'autofunzione CompleteDone che fa il lavoro:

au CompleteDone * pclose

0

Puoi digitarlo nel .vimrc:

set completeopt-=preview

Per favore, ti va di spiegare di più?
Wtower

1
Questo in realtà non risponde alla domanda, questo impedisce alla finestra di anteprima di apparire e di non essere chiusa dopo il completamento. Notare che l'OP ha detto di aver provato anche "completeopt".
nerdwaller
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.