Jak automatycznie usunąć okno podglądu po autouzupełnianiu w Vimie?

91

Używam omnifunc=pythoncomplete. Podczas autouzupełniania słowa (np. os.<something>) Otrzymuję listę kwalifikujących się członków klasy i funkcji, zgodnie z oczekiwaniami, a także okno podglądu bufora magazynującego z dokumentacją o wybranym składniku lub funkcji. To świetnie, ale po wybraniu funkcji, którą chcę, okno podglądu pozostaje.

Mogę się go pozbyć :pc, ale chciałbym, żeby zniknął automatycznie po wybraniu funkcji a la Eclipse. Bawiłem się, completeoptale bezskutecznie.

Ben Davini
źródło
8
dobre pytanie - przestałem używać omnicomplete, ponieważ pozostawił ten głupi bufor otwarty.
Wayne Werner

Odpowiedzi:

106

Umieść w swoim 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
źródło
2
Wydaje się, że powoduje to uszkodzenie okna edycji poleceń (q: lub q /). Dodałem kolejny czek: && bufname ("%")! = "[Command Line]" do obu linii
Ben
2
@Ben: Woah, dlaczego nie widziałem twojego komentarza przed opublikowaniem tego pytania . Odpowiedź dostałem stamtąd była zmiana pclosedo silent! pclose.
idbrii
1
Dzięki zarówno gotgenom, jak i pydave. Twoje sztuczki działają idealnie!
Lubulos
74

Mimo że istnieje już zaakceptowana odpowiedź, znalazłem ją bezpośrednio w dokumentacji, która będzie działać dla każdej wtyczki, która ma ten problem.

autocmd CompleteDone * pclose
Dan Bradbury
źródło
15
CompleteDonezostał dodany w wersji 7.4. Ta metoda powinna być preferowana zamiast CursorMovedI/ InsertLeavepodejście.
Peter Rincker,
7
@PeterRincker Wolę, aby okno nie zamykało się po zakończeniu (ponieważ chcę zobaczyć dokumentację podczas wpisywania argumentów), więc będę używał InsertLeavelinii.
DBedrenko
19

Jeśli masz zainstalowaną wtyczkę Supertab, dostępna jest opcja o nazwie supertab-closepreviewonpopupclose.

Umieść następujący plik w swoim .vimrc:

let g:SuperTabClosePreviewOnPopupClose = 1
Profpatsch
źródło
16
Głosuję za tą odpowiedzią, ponieważ jest to wskazówka, że ​​wtyczka YouCompleteMe ma opcję ag: ycm_autoclose_preview_window_after_insertion.
duleshi,
@duleshi dokładnie to, czego szukałem!
Andy Hayden
@AndyHayden Cieszę się, że mogę pomóc! Właśnie dla tego zostawiłem komentarz!
duleshi
dziękuję @duleshi, właśnie tego potrzebowałem!
David Woods
9

Nie wiem, jak zamknąć go automatycznie, ale możesz pisać

: pclose

aby ręcznie zamknąć podgląd zarysowania.

Alan Dong
źródło
1

Możesz wrzucić następujące mapowania, aby niektóre klawisze próbowały zamknąć okno podglądu.

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>

Możesz także użyć autokomend, aby zamknąć okno podglądu po zakończeniu w trybie wstawiania:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end
za dużo php
źródło
1

Wiem, że to pytanie jest bardzo stare, ale po wielu dniach szukania „czystego” rozwiązania właśnie znalazłem automatyczną funkcję CompleteDone, która spełnia swoje zadanie:

au CompleteDone * pclose
resi
źródło
0

Możesz to wpisać w .vimrc:

set completeopt-=preview
Messi
źródło
Czy możesz wyjaśnić więcej?
Wtower
1
To w rzeczywistości nie odpowiada na pytanie, dzięki temu okno podglądu nie pojawia się nigdy i nie jest zamykane po zakończeniu. Zauważ, że OP powiedział, że spróbował również „completeeopt”.
nerdwaller