विम में स्वतः पूर्णता के बाद आप पूर्वावलोकन विंडो को स्वचालित रूप से कैसे हटाते हैं?


91

मैं उपयोग कर रहा हूं omnifunc=pythoncomplete। जब किसी शब्द (जैसे, os.<something>) को स्वतः पूर्ण किया जाता है , तो मुझे पात्र वर्ग के सदस्यों और कार्यों की सूची मिलती है, साथ ही अपेक्षित सदस्य और फ़ंक्शन के बारे में प्रलेखन के साथ एक स्क्रैच बफर पूर्वावलोकन विंडो भी मिलती है। यह बहुत अच्छा है, लेकिन मैं चाहता हूं कि फ़ंक्शन का चयन करने के बाद, पूर्वावलोकन विंडो बनी रहे।

मैं इसके साथ छुटकारा पा सकता हूं :pc, लेकिन मैं अपने फंक्शन, एक ला एक्लिप्स को चुनने के बाद इसे अपने आप गायब करना चाहूंगा। मैं चारों ओर से खेला है, completeoptलेकिन कोई फायदा नहीं हुआ।


8
अच्छा सवाल - मैंने सर्वव्यापी का उपयोग करना बंद कर दिया क्योंकि यह उस बेवकूफ बफर को खुला छोड़ देता है।
वेन वर्नर

जवाबों:


106

निम्नलिखित को अपने 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
यह मेरे लिए कमांड एडिट विंडो को तोड़ने के लिए लगता है (q: या q /)। मैंने एक और चेक जोड़ा: && buname ("%")! = "" [कमांड लाइन] "दोनों पंक्तियों में
बेन

2
@ बान: वाह यह सवाल पोस्ट करने से पहले मैंने आपकी टिप्पणी को कैसे नहीं देखा । मुझे वहां से जो जवाब मिला, उसे बदलना pcloseथा silent! pclose
इडब्रि

1
गेटेनेस और पाइडेव दोनों के लिए धन्यवाद। आपकी तरकीबें पूरी तरह से काम करती हैं!
लुबुलोस

73

हालांकि पहले से ही एक स्वीकृत उत्तर है, मुझे यह सीधे डॉक्स से मिला है जो इस समस्या वाले किसी भी प्लगइन के लिए काम करेगा।

autocmd CompleteDone * pclose

15
CompleteDoneसंस्करण 7.4 में जोड़ा गया था। इस पद्धति को ओवर CursorMovedI/ InsertLeaveअप्रोच को प्राथमिकता दी जानी चाहिए ।
पीटर रिनकर

7
@PeterRincker मैं विंडो को पूरा करने पर बंद नहीं करना पसंद करता हूं (क्योंकि मैं दस्तावेज़ीकरण देखना चाहता हूं क्योंकि मैं तर्क में टाइप कर रहा हूं), इसलिए मैं InsertLeaveलाइन का उपयोग करूंगा ।
DBedrenko

19

यदि आपके पास सुपरटैब प्लगइन स्थापित है, तो एक विकल्प कहा जाता है supertab-closepreviewonpopupclose

निम्नलिखित को अपने .vimrc में रखें:

let g:SuperTabClosePreviewOnPopupClose = 1

16
मैं इस उत्तर को बढ़ाता हूं क्योंकि यह संकेत है कि YouCompleteMe प्लगइन के पास ag: ycm_autoclose_preview_window_after_insertion विकल्प है।
दुलाशी

@duleshi वास्तव में मैं क्या देख रहा था!
एंडी हेडन

@AndyHayden खुशी है कि मैं मदद कर सकता हूँ! यही कारण है कि मैं टिप्पणी के लिए छोड़ दिया!
डुल्शी

शुक्रिया @duleshi कि ठीक वैसा ही जैसा मुझे चाहिए था!
डेविड वुड्स

9

मुझे नहीं पता कि इसे अपने आप कैसे बंद किया जाए, लेकिन आप टाइप कर सकते हैं

: pclose

स्क्रैच पूर्वावलोकन को मैन्युअल रूप से बंद करने के लिए।


1

आप पूर्वावलोकन के विंडो को बंद करने के लिए कुछ कुंजियों को रखने के लिए निम्न मैपिंग में फेंक सकते हैं।

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>

जब आप प्रविष्टि मोड में समाप्त हो जाते हैं तो आप पूर्वावलोकन विंडो को बंद करने के लिए ऑटोकॉमैंड्स का उपयोग कर सकते हैं:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end

1

मुझे पता है कि यह सवाल बहुत पुराना है, लेकिन एक "साफ" समाधान की तलाश के दिनों के बाद, मैंने अभी-अभी काम पूरा करने वाला कम्प्लायड ऑटोफंक्शन पाया है:

au CompleteDone * pclose

0

आप इसमें टाइप कर सकते हैं .vimrc:

set completeopt-=preview

आप और अधिक समझाने के लिए कृपया केयर करें?
Wtower

1
यह वास्तव में सवाल का जवाब नहीं देता है, यह पूर्वावलोकन विंडो को कभी भी पॉपिंग से रखता है, पूरा होने के बाद खारिज नहीं किया जा रहा है। ध्यान दें कि ओपी ने कहा कि उन्होंने "पूरी तरह से" प्रयास किया।
nerdwaller
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.