Bagaimana Anda secara otomatis menghapus jendela pratinjau setelah pelengkapan otomatis di Vim?

92

Saya menggunakan omnifunc=pythoncomplete. Saat melengkapi kata secara otomatis (misalnya, os.<something>), saya mendapatkan daftar anggota kelas dan fungsi yang memenuhi syarat, seperti yang diharapkan, serta jendela pratinjau buffer awal dengan dokumentasi tentang anggota atau fungsi yang dipilih. Ini bagus, tetapi setelah memilih fungsi yang saya inginkan, jendela pratinjau tetap ada.

Saya bisa menghilangkannya dengan :pc, tapi saya ingin itu menghilang secara otomatis setelah saya memilih fungsi saya, a la Eclipse. Saya telah bermain-main dengan completeopttetapi tidak berhasil.

Ben Davini
sumber
8
pertanyaan bagus - Saya berhenti menggunakan omnicomplete karena buffer bodoh itu tetap terbuka.
Wayne Werner

Jawaban:

106

Letakkan yang berikut ini di vimrc Anda:

" 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
sumber
2
Ini sepertinya merusak jendela edit perintah untuk saya (q: atau q /). Saya menambahkan cek lagi: && bufname ("%")! = "[Command Line]" ke kedua baris
Ben
2
@Ben: Woah bagaimana saya tidak melihat komentar Anda sebelum memposting pertanyaan ini . Jawaban yang saya dapatkan dari sana adalah untuk berubah pclosemenjadi silent! pclose.
idbrii
1
Berkat gotgenes dan pydave. Trik Anda bekerja dengan sempurna!
Lubulos
75

Meskipun sudah ada jawaban yang diterima, saya menemukan ini langsung dari dokumen yang akan berfungsi untuk plugin apa pun yang mengalami masalah ini.

autocmd CompleteDone * pclose
Dan Bradbury
sumber
15
CompleteDonetelah ditambahkan di versi 7.4. Metode ini harus lebih disukai daripada CursorMovedI/ InsertLeavependekatan.
Peter Rincker
7
@PeterRincker Saya lebih suka jendela tidak menutup saat selesai (karena saya ingin melihat dokumentasi saat saya mengetik di argumen), jadi saya akan menggunakan InsertLeavebaris tersebut.
DBedrenko
ini luar biasa :)
Mahdi mehrabi
19

Jika Anda menginstal plugin supertab, ada opsi bernama supertab-closepreviewonpopupclose.

Letakkan yang berikut ini di .vimrc Anda:

let g:SuperTabClosePreviewOnPopupClose = 1
Profpatsch
sumber
16
Saya memberi suara positif pada jawaban ini karena ini adalah petunjuk bahwa plugin YouCompleteMe memiliki opsi ag: ycm_autoclose_preview_window_after_insertion.
duleshi
@duleshi persis seperti yang saya cari!
Andy Hayden
@AndyHayden Senang bisa membantu! Untuk itulah saya meninggalkan komentar!
duleshi
terima kasih @duleshi, itulah yang saya butuhkan juga!
David Woods
9

Saya tidak tahu cara menutupnya secara otomatis, tetapi Anda bisa mengetik

: pclose

untuk menutup pratinjau awal secara manual.

Alan Dong
sumber
1

Anda dapat memasukkan pemetaan berikut untuk meminta kunci tertentu mencoba menutup jendela pratinjau.

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>

Anda juga dapat menggunakan perintah otomatis untuk menutup jendela pratinjau setelah Anda selesai dalam mode penyisipan:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end
terlalu banyak php
sumber
1

Saya tahu pertanyaan ini sudah sangat tua, tetapi setelah berhari-hari mencari solusi "bersih", saya baru saja menemukan fungsi otomatis CompleteDone yang melakukan pekerjaan itu:

au CompleteDone * pclose
resi
sumber
0

Anda dapat mengetiknya di .vimrc:

set completeopt-=preview
messi
sumber
Cou Anda mohon untuk menjelaskan lebih lanjut?
Wtower
1
Ini tidak benar-benar menjawab pertanyaan, ini membuat jendela pratinjau tidak pernah muncul, tidak ditutup setelah selesai. Perhatikan bahwa OP mengatakan mereka mencoba "completeopt" juga.
nerdwaller