Làm cách nào để bạn tự động xóa cửa sổ xem trước sau khi tự động hoàn thành trong Vim?


91

Tôi đang sử dụng omnifunc=pythoncomplete. Khi tự động hoàn thành một từ (ví dụ os.<something>:), tôi nhận được danh sách các thành viên và hàm đủ điều kiện, như mong đợi, cũng như cửa sổ xem trước bộ đệm đầu với tài liệu về thành viên hoặc hàm đã chọn. Điều này thật tuyệt, nhưng sau khi chọn chức năng tôi muốn, cửa sổ xem trước vẫn còn.

Tôi có thể loại bỏ nó :pc, nhưng tôi chỉ muốn nó tự động biến mất sau khi tôi chọn chức năng của mình, một la Eclipse. Tôi đã chơi xung quanh completeoptnhưng vô ích.


8
câu hỏi hay - Tôi đã ngừng sử dụng omnicomplete vì nó để trống bộ đệm ngu ngốc đó.
Wayne Werner

Câu trả lời:


106

Đặt những thứ sau vào vimrc của bạn:

" 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
Điều này dường như phá vỡ cửa sổ chỉnh sửa lệnh đối với tôi (q: hoặc q /). Tôi đã thêm một séc khác: && bufname ("%")! = "[Dòng lệnh]" vào cả hai dòng
Ben

2
@Ben: Woah sao tôi không thấy bình luận của bạn trước khi đăng câu hỏi này . Câu trả lời tôi nhận được từ đó là thay đổi pclosethành silent! pclose.
idbrii 31-07-12

1
Nhờ cả gotgenes và pydave. Thủ thuật của bạn hoạt động hoàn hảo!
Lubulos

73

Mặc dù đã có một câu trả lời được chấp nhận, tôi đã tìm thấy câu trả lời này trực tiếp từ tài liệu sẽ hoạt động cho bất kỳ plugin nào đang gặp sự cố này.

autocmd CompleteDone * pclose

15
CompleteDoneđã được thêm vào trong phiên bản 7.4. Phương pháp này nên được ưu tiên hơn CursorMovedI/ InsertLeavecách tiếp cận.
Peter Rincker

7
@PeterRincker Tôi không muốn cửa sổ đóng khi hoàn thành (vì tôi muốn xem tài liệu khi đang nhập các đối số), vì vậy tôi sẽ sử dụng InsertLeavedòng này.
DBedrenko

19

Nếu bạn đã cài đặt plugin supertab, có một tùy chọn được gọi là supertab-closepreviewonpopupclose .

Đặt nội dung sau vào .vimrc của bạn:

let g:SuperTabClosePreviewOnPopupClose = 1

16
Tôi tán thành câu trả lời này vì đây là một gợi ý rằng plugin YouCompleteMe có tùy chọn ag: ycm_autoclose_preview_window_ After_insertion.
duleshi,

@duleshi chính xác những gì tôi đang tìm kiếm!
Andy Hayden

@AndyHayden Rất vui vì tôi có thể giúp đỡ! Đó là những gì tôi để lại bình luận cho!
duleshi

cảm ơn bạn @duleshi, đó cũng chính là những gì tôi cần!
David Woods

9

Tôi không biết cách đóng nó tự động, nhưng bạn có thể nhập

: pclose

để đóng bản xem trước vết xước theo cách thủ công.


1

Bạn có thể ném vào các ánh xạ sau để có một số khóa nhất định cố gắng đóng cửa sổ xem trước.

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>

Bạn cũng có thể sử dụng lệnh tự động để đóng cửa sổ xem trước khi bạn hoàn tất ở chế độ chèn:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end

1

Tôi biết câu hỏi này rất cũ, nhưng sau nhiều ngày tìm kiếm giải pháp "sạch", tôi chỉ tìm thấy chức năng tự động CompleteDone thực hiện công việc:

au CompleteDone * pclose

0

Bạn có thể nhập nó vào .vimrc:

set completeopt-=preview

Cou bạn vui lòng quan tâm để giải thích thêm?
Wtower

1
Điều này không thực sự trả lời câu hỏi, điều này giữ cho cửa sổ xem trước không bao giờ bật lên, không bị loại bỏ sau khi hoàn thành. Lưu ý rằng OP đã nói rằng họ cũng đã thử "completeopt".
nerdwaller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.