विम से बाहर निकलने के बिना एक बफर को बंद करें और अनलोड करें


54

अक्सर, मैं कुछ जानकारी को एक अस्थायी बफर में लोड करूँगा, और फिर इसे बंद कर दूंगा :clo!। लेकिन यह पूरी तरह से उतारने के बजाय बफर को छुपाता है, भले ही मैंने nohiddenसेट किया हो। जब मैं विम को छोड़ता हूं, तो पहले से ही कंटेंट के बारे में (मुझे लगता है) त्यागने के बाद मुझे एक अतिरिक्त पुष्टि मिलती है, मुझे यह थकाऊ लगता है।

मैं सिर्फ :q!इसके बजाय उपयोग कर सकता था , लेकिन यह एक बुरी आदत है क्योंकि इसमें विम पूरी तरह से बाहर निकल जाएगा यदि केवल एक बफर बचा है, जो भी कष्टप्रद है। इससे भी बदतर, अगर मैं टाइपो :qa!, मैं बहुत काम खो सकता है।

क्या कोई बीच का मैदान है? मुझे वास्तव में कुछ कमांड चाहिए जो वर्तमान बफर को मारता है लेकिन विम से बाहर नहीं निकलता है। मैं इसे Vimscript में लिखने का विरोध नहीं कर रहा हूं, लेकिन अगर कमांड पहले से मौजूद है तो मैं इसे टालूंगा।

जवाबों:


69

वास्तव में ऐसा करने की आज्ञा है: :bdeleteया बस :bd। डिफ़ॉल्ट रूप से यह वर्तमान बफर को अनलोड करेगा। अन्य बफर को अनलोड करने के लिए, पहले :buffersकमांड के साथ सभी बफ़र्स की सूची प्राप्त करें , और उसके बाद आप :bdइसे हटाने के बाद संख्या निर्दिष्ट कर सकते हैं । इसके अलावा :bd+ space+ tabबफर नाम का उपयोग कर पूरा करने की अनुमति देता है।


1
यह अंतिम खुले बफर पर काम करेगा, जो कि वास्तव में मैं नहीं चाहता था, लेकिन जब से यह नहीं छोड़ा है, यह मेरे उद्देश्यों के लिए पर्याप्त है।
केविन

Vim-bbye प्लगइन वह हो सकता है जिसे आप ढूंढ रहे हैं: github.com/moll/vim-bbye
alxndr

1
यह vi
redolent

इसके अलावा, अंतर्निहित उपनाम :lsयाद रखना आसान है (imo) और उसी के रूप में करता है:buffers
kuzyn

यह बफ़र को अनलोड नहीं करता है। यह वास्तव में इसे बंद भी नहीं करता है। यह बस 'buflisted' को अनिश्चित बनाता है। vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE

27

आप पूरी तरह से: bwipeout (या: bw) कमांड का उपयोग करके एक बफर मिटा सकते हैं। यह पूरी तरह से मेमोरी से बफर को हटा देता है, जिसमें आपके द्वारा जोड़े गए किसी भी निशान, विकल्प सेटिंग्स आदि शामिल हैं। इसी तरह,: bdelete (या: bd) बफर को हटा देता है, लेकिन इसे मेमोरी में छोड़ देता है और निशान और विकल्प सेटिंग्स को रखता है।

टॉम हेल की टिप्पणी के अनुसार, विम दस्तावेज़ का उपयोग करने की अनुशंसा करता है: bd over: bw जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं। मैं उपयोग करता हूं: bw क्योंकि मेमोरी से बफर को पूरी तरह से हटाने के विचार के रूप में, और मैं अपने बफर को बंद करने के बाद बने रहने की आवश्यकता के बिंदु पर निशान, बफर-विशिष्ट विकल्प सेटिंग्स आदि का ज्यादा उपयोग नहीं करता हूं।

जैसे: छोड़ (: q) कमांड, Vim एक त्रुटि देगा यदि बफर बदल गया है। इसे संबोधित करने के लिए, आप संकेत को दबाने के लिए कमांड के बाद विस्मयादिबोधक बिंदु को जोड़ सकते हैं। एक और विकल्प, सब कुछ में विस्मयादिबोधक बिंदु जोड़ने के बजाय, अपने vimrc में "सेट पुष्टिकरण" जोड़ना है। इस सेट के साथ, विम आपको फ़ाइल परिवर्तनों को बंद होने से बचाने के लिए संकेत देगा।

: bufdo एक उपयोगी कमांड है जो सभी सक्रिय बफ़र्स पर एक और कमांड निष्पादित करता है। के साथ संयोजन: bufdo कमांड के साथ: bw /: bd कमांड आपको एक ही बार में सभी सक्रिय बफ़र्स को निकालने देता है। आप अभी भी त्रुटियों को दबाने के लिए विस्मयादिबोधक बिंदु का उपयोग कर सकते हैं, लेकिन क्या आप इसे बाद में रखते हैं: bufdo, के बाद: bw, या दोनों के बाद प्रत्येक के लिए अलग-अलग परिणाम होते हैं:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

यहां कुछ अन्य उपयोगी बफर कमांड दिए गए हैं:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

इस सवाल के दायरे से बाहर बफ़र हैंडलिंग के लिए बहुत कुछ है। इस पर एक नज़र:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers


क्या आप कृपया इस उत्तर में कुछ स्पष्टीकरण जोड़ सकते हैं?
एवरग्रीनट्री

मदद कहती है "जब तक आप जानते हैं कि आप क्या कर रहे हैं, तब तक इसका कोई उपयोग न करें", यह दर्शाता है कि :bdज्यादातर मामलों में पसंद किया जाता है
टॉम हेल

1
@TomHale यह जानकर अच्छा लगेगा कि :bw"बफर से जुड़ी हर चीज खो गई है, उससे आगे क्या होता है। इस बफर के सभी निशान अमान्य हो जाते हैं, विकल्प सेटिंग्स खो जाती हैं, आदि"। अगर यह पूरी तरह से उचित है तो मुझे लगता है कि अगर मैं पूरी तरह से विम को छोड़ दूं तो यह एक बफर को 'बंद' करना चाहता है।
केनी एविट जूल

मैं पसंद करता हूं: bw over: bd क्योंकि अगर आप उपयोग करते हैं: bd और फिर <ctrl - ^> दबाएं, अंतिम उपयोग किए गए बफर में जाने के लिए, यह इसे मेमोरी से ऊपर लाएगा। : bw मुझे और अधिक नियंत्रण देता है और मैं जो चाहता हूं ^ ^
eli

यह महान है! धन्यवाद @ Soylent17!
अपोलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.