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.