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.


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

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

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

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.


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

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

0

Anda dapat mengetiknya di .vimrc:

set completeopt-=preview

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.