मैं विम में एक एकल बफर (कई में से) को कैसे बंद करूं?


445

मैं उदाहरण के लिए, विम में कई फाइलें खोलता हूं, चल रहा है

vim a/*.php

जो 23 फाइलें खोलता है।

फिर मैं अपना संपादन करता हूं और निम्नलिखित दो बार चलाता हूं

:q

जो मेरे सभी शौकीनों को बंद कर देता है।

आप विम में केवल एक बफर को कैसे बंद कर सकते हैं?


9
ध्यान दें कि आप फ़ाइलों को अलग-अलग विम विंडो में vim -o a/*.php(या -Oऊर्ध्वाधर विंडो का उपयोग करने के लिए) खोल सकते हैं और बफर नेविगेशन से बच सकते हैं - यह केवल कुछ फाइलों के लिए एक शानदार तरीका है, लेकिन 23 फाइलों के साथ उनके पास केवल कुछ लाइनें / कॉलम होंगे से प्रत्येक।
कैस्केबेल

1
@ जेफ्रोमी: इस ओर इशारा करने के लिए धन्यवाद! मैंने पहले कभी विकल्प -o का उपयोग नहीं किया है।
लेओ लेपोल्ड हर्ट्ज़ o

खिड़की विभाजन के विषय पर। यदि आप पहले से ही विम में हैं और विभाजन में एक और फ़ाइल खोलना चाहते हैं: क्षैतिज के लिए esp: ऊर्ध्वाधर के लिए evsp।
लान्जाफमे

जवाबों:


558

सावधानी का एक शब्द: "बीडब्ल्यू में w लिखने के लिए नहीं, बल्कि पोंछने के लिए खड़ा है!"

मैनुअल से अधिक:

: bd

बफ़र को अनलोड करें [N] (डिफ़ॉल्ट: वर्तमान बफ़र) और इसे बफ़र सूची से हटा दें। यदि बफर बदल दिया गया था, तो यह तब तक विफल रहता है, जब तक कि [!] निर्दिष्ट नहीं किया जाता है, जिस स्थिति में परिवर्तन खो जाते हैं। फ़ाइल अप्रभावित रहती है।

यदि आप जानते हैं कि आप क्या कर रहे हैं, तो आप भी उपयोग कर सकते हैं: बीडब्ल्यू

: BW

जैसे:: bdelete |, लेकिन वास्तव में बफर को हटा दें।


4
इसके अलावा करने की संभावना: करीब बफर संख्या एम एन या करने के लिए 'एम, NBD': 'bd एन 1 एन 2 ...' जहां N # एक बफर संख्या है
snowbound

61
मैनुअल कहता है कि :bwयदि आप जानते हैं कि "आप क्या कर रहे हैं" का उपयोग करें, जो मैं नहीं करता, तो मुझे लगता है कि मैं उपयोग करूंगा :bd
जूनबीर

1
मैं पहली बार में इससे भ्रमित था - मैं बफ़र्स को बंद करने के लिए एक नया टैब खोल रहा था ... लेकिन टैब में बफर को बंद करना (एक सीधे का उपयोग करके :bd) भी टैब को बंद कर देता है। आप क्या चाहते हैं :bd n .. [m]या :n,mbdविशिष्ट संख्याओं या संख्याओं की सीमा को बंद करने के लिए है, जिसे आप बफ़र्स को देखे बिना कर सकते हैं
जॉनी रा

5
wwriteविम मैनुअल के अनुसार कमांड के लिए कम है , इसके अलावा किसी भी "वाइपआउट" का कोई उल्लेख नहीं है। कमांड का विवरण ( help write) "संपूर्ण बफ़र को वर्तमान फ़ाइल में लिखें" से शुरू होता है।
am

3
@ मैं भी असमंजस में पड़ गया, लेकिन उसका मतलब था कमांड wमें पोंछना मतलब वह bwकमांड के बारे में बात नहीं कर रहा है w। उन्होंने इस चेतावनी को वहां रखा, इसलिए लोगों को लगा कि bwकमांड का मतलब बफर लिखना नहीं है (जिसका मतलब यह बफर वाइपआउट नहीं है।)
जॉन

351

यदि यह पिछले उत्तरों से स्पष्ट नहीं हुआ है:

: bd करंट बफर को बंद कर देगा। यदि आप बफ़र सूची को हथियाना नहीं चाहते हैं।


4
खोजने से पहले: bd ने मेरे लिए कभी कोई मतलब नहीं बनाया कि लोगों को करने में कोई समस्या नहीं है: ls -> doc नंबर के लिए स्कैन -> नंबर द्वारा बफर अनलोड करना। क्या वास्तव में लोग इसे प्रभावी पाते हैं?
स्वेग

3
@ बफ़र्स की एक श्रृंखला के लिए सुनिश्चित करें, लेकिन एक अकेला: बीडी के लिए शायद अधिक प्रभावी है।
चरण


10
:bdकेवल बफर को बंद कर देता है जबकि (जो भी मतलब है) जबकि :bwसभी चर को भी साफ कर देगा और वास्तव में lsबफर से इसे हटा देता है ।
RedX

1
नीचे hhh का उत्तर अधिक

103

बफ़र का उपयोग करके अपनी बफ़र आईडी की जाँच करें

आपको वहां बफ़र्स की सूची दिखाई देगी

1  a.php
2  b.php
3  c.php

यदि आप बफर से b.php निकालना चाहते हैं

:2bw

यदि आप बफ़र्स से सभी को निकालना / बंद करना चाहते हैं

:1,3bw

4
आप सभी बफ़र्स को भी मिटा सकते हैं:% bw
cdleonard

7
बफर आईडी की जांच करने के लिए शॉर्ट कट: 2 CTRL-G
स्नोबाउंड

43

इसकी संख्या निर्दिष्ट करने के बजाय: ls कमांड और डिलीट (अनलोड, वाइप ..) के ouput को ब्राउज़ करने के बजाय, मुझे पता है कि फ़ाइल नामों का उपयोग करना अक्सर अधिक प्रभावी होता है।

उदाहरण के लिए, मैंने कुछ ठीक बिंदु की अपनी यादों को ताज़ा करने के लिए .txt फ़ाइल की एक जोड़ी को खोलने के बाद .. प्रकार के टेम्पलेट के रूप में उपयोग करने के लिए पाठ की कुछ पंक्तियों को कॉपी और पेस्ट किया .. आदि मैं निम्नलिखित टाइप करूँगा:

:bd txt <Tab>

ध्यान दें कि मिलान स्ट्रिंग को फ़ाइल नाम की शुरुआत में नहीं होना चाहिए।

उपरोक्त स्क्रीन के तल पर 'txt' से मेल खाने वाले फ़ाइल नामों की सूची प्रदर्शित करता है: bd कमांड को मैंने शुरू में अछूता टाइप किया है, जिसे पूरा करने के लिए तैयार है।

यहाँ एक उदाहरण है:

doc1.txt doc2.txt
:bd txt 

मैं 'txt' बिट पर बैकस्पेस दे सकता था और फ़ाइल नाम में टाइप करना चाहता हूं जिसे मैं हटाना चाहता हूं, लेकिन जहां यह वास्तव में सुविधाजनक है, मेरे पास यह नहीं है: यदि मैं टैब कुंजी को दूसरी बार मारता हूं, तो विम स्वचालित रूप से अपना आदेश पूरा करता है। पहले मैच के साथ:

:bd doc1.txt

अगर मैं इस विशेष बफ़र से छुटकारा पाना चाहता हूं तो मुझे एंटर को हिट करना होगा।

और अगर मैं जिस बफर को डिलीट करना चाहता हूं वह दूसरा (तीसरा .. आदि) मैच होता है, तो मुझे मैचों की सूची के माध्यम से अपने: बीडी कमांड चक्र को बनाने के लिए टैब कुंजी को दबाए रखना होगा।

स्वाभाविक रूप से, इस पद्धति का उपयोग किसी दिए गए बफर को ऐसे कमांड के माध्यम से स्विच करने के लिए भी किया जा सकता है: b ..: sb .. आदि।

यह दृष्टिकोण विशेष रूप से तब उपयोगी होता है जब 'हिडन ’विम विकल्प सेट किया जाता है, क्योंकि बफर सूची जल्दी से काफी बड़ी हो सकती है, कई स्क्रीन को कवर कर सकती है, और मैं जिस विशेष बफर की तलाश कर रहा हूं, उसे स्पॉट करना मुश्किल हो जाता है।

इस सुविधा का अधिकतम लाभ उठाने के लिए, निम्नलिखित विम फ़ाइल को पढ़ना और उसके अनुसार टैब कमांड-लाइन पूरा करने के व्यवहार को ट्विक करना सबसे अच्छा है, ताकि यह आपके वर्कफ़्लो के अनुकूल हो:

:help wildmode

व्यवहार मैंने निम्नलिखित सेटिंग से परिणामों का वर्णन किया है, जिसे मैंने बैश समापन का अनुकरण करने के लिए स्थिरता के लिए चुना था:

:set wildmode=list:longest,full

जैसा कि बफर नंबरों का उपयोग करने का विरोध किया गया है, इस दृष्टिकोण की योग्यता यह है कि मैं आमतौर पर दिए गए फ़ाइल नाम के कम से कम हिस्से को याद करता हूं, जिससे मुझे पहले बाइनरी लक्ष्य को लक्षित करने की बजाय सीधे: ls कमांड के माध्यम से अपनी संख्या को देखना पड़ता है।


40

उपयोग:

  • :ls - बफ़र्स को सूचीबद्ध करने के लिए
  • :bd#n- बफर को बंद करने के लिए जहां # एन बफर नंबर है ( lsइसे प्राप्त करने के लिए उपयोग करें)

उदाहरण:

  • 2 बफर हटाने के लिए:

    :bd2
    

16

आप कुंजियों को हवा के माध्यम से साइकिल बनाते हुए, फ़ंक्शन कुंजियों को भी अगले और पिछले मैप कर सकते हैं

map <F2> :bprevious<CR>
map <F3> :bnext<CR>

मेरे vimrc से


2

कैसा रहेगा

vim -O a a

इस तरह आप अपनी बाईं ओर एक फ़ाइल को संपादित कर सकते हैं और अपने दाईं ओर पूरे dir नेविगेट कर सकते हैं ... बस एक विचार, समाधान नहीं ...


2

[संपादित करें: यह एक मूर्खतापूर्ण सुझाव था जब से मैं विम को अच्छी तरह से नहीं जानता था। कृपया बफ़र्स के बजाय टैब का उपयोग न करें; टैब विम की "विंडो लेआउट" हैं]

शायद टैब का उपयोग करने के लिए स्विच?

vim -p a/*.php टैब में समान फ़ाइलें खोलता है

gtऔर gTआगे और पीछे टैब स्विच करें

:q केवल वर्तमान टैब बंद करता है

:qa सब कुछ बंद कर देता है और बाहर निकल जाता है

:tabo सब कुछ बंद कर देता है लेकिन वर्तमान टैब


2
आप यह क्यों कहते हैं कि टैब का उपयोग करना एक बेवकूफी भरा सुझाव है? मैं केवल इसलिए पूछता हूं क्योंकि मैं हर समय टैब का उपयोग करता हूं ...: ^ /
Nate


1
यह एक महान पद था - इसने मुझे और भी गहरी खुदाई करने के लिए प्रेरित किया - क्या आपने गौर किया है wildmenu? यह lustyjuggler (हालांकि सरल) के समान है, लेकिन इसमें बनाया गया है (जो मेरे लिए अच्छा था, क्योंकि lustyjuggler को जरूरत है +ruby, और ubuntu के वनियर जहाजों के लिए डिफ़ॉल्ट विम -ruby)।
नैट

@ नेट: हाँ, मैं फाइलें खोलने के लिए वाइल्डमेनू का उपयोग कर रहा हूं, लेकिन जब आपके पास प्रोजेक्ट में कई फाइलें हैं, तो यह सिर्फ पैमाने पर नहीं है। इसके अलावा, vim-noxउबंटू के पैकेज में रूबी का समर्थन है।
लियोनिद शेवतोव

1

बफ़रगेटर या NERDTree जैसे बफर या ट्री नेविगेशन प्लगइन का उपयोग करने वालों को वर्तमान बफर को नष्ट करने से पहले इन विभाजन को टॉगल करने की आवश्यकता होगी - अन्यथा आप अपने विभाजन को विनकीविले में भेज देंगे।

मैं उपयोग करता हूं:

"" Buffer Navigation                                                                                                                                                                                        
" Toggle left sidebar: NERDTree and BufferGator                                                                                                                                                             
fu! UiToggle()                                                                                                                                                                                              
  let b = bufnr("%")                                                                                                                                                                                        
  execute "NERDTreeToggle | BuffergatorToggle"                                                                                                                                                              
  execute ( bufwinnr(b) . "wincmd w" )                                                                                                                                                                      
  execute ":set number!"                                                                                                                                                                                    
endf                                                                                                                                                                                                        
map  <silent> <Leader>w  <esc>:call UiToggle()<cr>   

NERDTreeToggleउस सूची में " " टाइपिंग के समान ही है :NERDTreeToggle। आप इस फ़ंक्शन को अपने स्वयं के कॉन्फ़िगरेशन के साथ एकीकृत करने के लिए संशोधित कर सकते हैं।


इसके लिए, bbye plugin सही है जो उपयोग करते समय :bdeleteया आपके विंडो लेआउट को सुरक्षित रखता है :bwipeoutमेरा जवाब देखिए ।
वोल्फसन

0

विंडो बंद किए बिना बफ़र बंद करें

यदि आप अपने विंडो लेआउट (विभाजन के आधार पर वर्तमान लेआउट) को नष्ट किए बिना एक बफर को बंद करना चाहते हैं, तो आप प्लग इन का उपयोग कर सकते हैं जैसे कि बायब । इसके आधार पर, आप बस उपयोग कर सकते हैं

:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)

या जैसे .vimrcआसान पहुँच के लिए अपने में मैपिंग बनाएँ

:nnoremap <Leader>q :Bdelete<CR>

Vim: bdelete और: bwipeout पर लाभ

से प्लगइन के प्रलेखन :

  • बफ़र बंद करें और निकालें।
  • उस विंडो में एक और फाइल दिखाएं।
  • यदि आपको कोई अन्य फ़ाइल नहीं मिली है, तो एक खाली फ़ाइल दिखाएं।
  • यदि आप उस विंडो में किसी अन्य फ़ाइल को संपादित करने का निर्णय लेते हैं तो बेकार [कोई फ़ाइल] बफ़र्स न छोड़ें।
  • भले ही एक फाइल कई विंडो में खुली हो।
  • विभिन्न बफर खोजकर्ताओं और टैबबारों के साथ ठीक-ठीक काम करें।

: bdelete vs: bwipeout

से प्लगइन के प्रलेखन :

एक बफर को बंद करने के लिए विम के पास दो कमांड हैं: :bdeleteऔर :bwipeout। पूर्व बफर सूची से फ़ाइल को हटाता है, इसके विकल्प, चर और मैपिंग को साफ़ करता है। हालांकि, यह जंपलिस्ट में रहता है, इसलिए Ctrl-oआपको वापस ले जाता है और फ़ाइल को फिर से खोल देता है। यदि वह नहीं है जो आप चाहते हैं, तो उपयोग करें :bwipeoutया Bbye के समतुल्य :Bwipeoutजहाँ आपने उपयोग किया है :bdelete

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