Vim'de otomatik tamamlamadan sonra önizleme penceresini otomatik olarak nasıl kaldırırsınız?


92

Kullanıyorum omnifunc=pythoncomplete. Bir kelimeyi otomatik olarak tamamlarken (örn. os.<something>), Beklendiği gibi uygun sınıf üyeleri ve işlevlerin listesini ve ayrıca seçilen üye veya işlevle ilgili belgeleri içeren bir çalışma arabelleği önizleme penceresini alıyorum. Bu harika, ancak istediğim işlevi seçtikten sonra önizleme penceresi kalıyor.

Bundan kurtulabilirim :pc, ancak işlevim olan la Eclipse'i seçtikten sonra otomatik olarak kaybolmasını istiyorum. Etrafta oynadım completeoptama boşuna.


8
güzel soru - Omnicomplete'i kullanmayı bıraktım çünkü o aptal tamponu açık bıraktı.
Wayne Werner

Yanıtlar:


106

Aşağıdakileri vimrc'nize koyun:

" 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
Bu benim için komut düzenleme penceresini kırıyor gibi görünüyor (q: veya q /). Her iki satıra da başka bir kontrol ekledim: && bufname ("%")! = "[Komut Satırı]"
Ben

2
@Ben: Woah bu soruyu göndermeden önce yorumunuzu nasıl görmedim . Orada aldığım cevap değiştirmekti pcloseiçin silent! pclose.
idbrii

1
Hem gotgenes hem de pydave sayesinde. Numaralarınız mükemmel çalışıyor!
Lubulos

75

Zaten kabul edilmiş bir cevap olmasına rağmen, bunu doğrudan bu sorunu yaşayan herhangi bir eklenti için çalışacak olan belgelerden buldum.

autocmd CompleteDone * pclose

15
CompleteDone7.4 sürümünde eklendi. Bu yöntem CursorMovedI/ InsertLeaveyaklaşım yerine tercih edilmelidir .
Peter Rincker

7
@PeterRincker Pencerenin tamamlandığında kapanmamasını tercih ederim (çünkü argümanları yazarken dokümantasyonu görmek istiyorum), bu yüzden InsertLeavesatırı kullanacağım .
DBedrenko

bu harika :)
Mehdi mehrabi

19

Supertab eklentisini yüklediyseniz, adında bir seçenek vardır supertab-closepreviewonpopupclose.

Aşağıdakileri .vimrc dosyanıza koyun:

let g:SuperTabClosePreviewOnPopupClose = 1

16
Bu yanıta, YouCompleteMe eklentisinin ag: ycm_autoclose_preview_window_after_insertion seçeneğine sahip olduğuna dair bir ipucu olduğu için oy veriyorum.
duleshi

@duleshi tam olarak aradığım şey!
Andy Hayden

@AndyHayden Yardımcı olabileceğime sevindim! Ben bunun için yorum bıraktım!
duleshi

teşekkür ederim @duleshi de tam olarak ihtiyacım olan şey!
David Woods

9

Otomatik olarak nasıl kapatacağımı bilmiyorum ama yazabilirsin

: pclose

çizik önizlemeyi manuel olarak kapatmak için.


1

Belirli anahtarların önizleme penceresini kapatmaya çalışmasını sağlamak için aşağıdaki eşlemeleri atabilirsiniz.

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>

Ekleme modunda işiniz bittiğinde önizleme penceresini kapatmak için otomatik komutları da kullanabilirsiniz:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end

1

Bu sorunun çok eski olduğunu biliyorum, ancak "temiz" bir çözüm aradıktan sonra, işi yapan CompleteDone otomatik işlevini buldum:

au CompleteDone * pclose

0

Bunu şuraya yazabilirsiniz .vimrc:

set completeopt-=preview

Lütfen biraz daha açıklar mısınız?
Wtower

1
Bu aslında soruyu yanıtlamaz, bu, önizleme penceresinin tamamlandıktan sonra kapatılmamasını, sürekli açılmasını engeller. OP'nin de "completeopt" denediğini söylediğine dikkat edin.
nerdwaller
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.