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.


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

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

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

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.


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

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

0

Możesz to wpisać w .vimrc:

set completeopt-=preview

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.