VIM एप्लिकेशन को छोड़ने के बिना फ़ाइल बंद करें?


258

मैं का उपयोग करें :eऔर :wसंपादित करने के लिए और एक फ़ाइल लिखने के आदेशों। मुझे यकीन नहीं है कि अगर विम को छोड़े बिना वर्तमान फ़ाइल को बंद करने के लिए "करीब" कमांड है?

मुझे पता है कि :qकमांड का इस्तेमाल किसी फाइल को बंद करने के लिए किया जा सकता है, लेकिन अगर यह आखिरी फाइल है, तो विम को भी बंद कर दिया गया है; वास्तव में मैक ओएस पर MacVim छोड़ देता है। केवल विम विंडो बंद है और मैं उपयोग कर सकता हूं Control- Nफिर से एक खाली विम विंडो खोलने के लिए। मैं चाहूंगा कि विम एक खाली स्क्रीन के साथ खुला रहे।

जवाबों:


343

यह बफ़र को हटाता है (जो फ़ाइल को बंद करने के लिए अनुवाद करता है)

:bd 

6
ओपी ने जो मांगा, उसके लिए आपकी तुलना में बेहतर है, हालांकि मैं पसंद करता हूं: कुछ भी नहीं क्योंकि मुझे बफर सूची में बफर होना पसंद है। :)
Rytmis

2
जब मैं ऐसा करता हूं, विम पहला बफर दिखाता है, लेकिन मैं अभी भी बफर तक पहुंच सकता हूं
मार्टिन एंडरसन

18
@ मर्टिन, बफर को पूरी तरह से हटाने के लिए, उपयोग करें : bw
sebnow

43

जैसा कि पहले ही उल्लेख किया गया है, आप देख रहे हैं :bd, हालांकि यह पूरी तरह से बफर को हटा नहीं है, यह अभी भी सुलभ है:

:e foo
:e bar
:buffers
  1 #h   "foo"                          line 1
  2 %a   "bar"                          line 1
Press ENTER or type command to continue
:bd 2
:buffers
  1 %a   "foo"                          line 1
Press ENTER or type command to continue
:b 2
2   bar

आप इसके बजाय :bwइसे पूरी तरह से हटा सकते हैं।

:bw 2
:b 2 
E86: Buffer 2 does not exist

:bwकाफी समय से मुझे गुदगुदी के बारे में नहीं पता था ।


3
बस यह ध्यान रखें कि VIM की सहायता इस बारे में कहती है :bw- "जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं, इसका उपयोग न करें।"
Mato

22

यदि आपकी विम विंडो में कई स्प्लिट विंडो हैं :bd, तो करंट फाइल के स्प्लिट विंडो को बंद कर देता है, इसलिए मैं कुछ और अधिक उपयोग करना पसंद करता हूं:

map fc <Esc>:call CleanClose(1)

map fq <Esc>:call CleanClose(0)


function! CleanClose(tosave)
if (a:tosave == 1)
    w!
endif
let todelbufNr = bufnr("%")
let newbufNr = bufnr("#")
if ((newbufNr != -1) && (newbufNr != todelbufNr) && buflisted(newbufNr))
    exe "b".newbufNr
else
    bnext
endif

if (bufnr("%") == todelbufNr)
    new
endif
exe "bd".todelbufNr
endfunction

12
अब यह स्निपेट क्या करता है?
dolzenko

1
आप शायद चाहते हैं कि वास्तव में कमांड निष्पादित करने के लिए कॉल के बाद <CR>।
dma

2
@dolzenko यह सामान्य मोड में 'fc' और 'fq' को मैप करता है ताकि वर्तमान बफर को वैकल्पिक रूप से सहेजा जा सके और फिर मूल को हटाने से पहले एक नए बफर में स्विच किया जा सके। यह आपके द्वारा स्थापित किसी भी विभाजन को संरक्षित करता है।
dma

यह अच्छा विचार प्रतीत होता है। जब मैं इसे आज़माता हूं, हालांकि, मुझे निम्न त्रुटि संदेश मिलता है: "फ़ंक्शन को फिर से परिभाषित नहीं कर सकता CleanClose: यह उपयोग में है"
जोंनोमो

2
"F" का रीमैप न करें। । । "च" वास्तव में सुपर उपयोगी है। इस मानचित्रण के साथ, आप कभी भी "सी" या "क्यू" के लिए "आगे" नहीं ढूंढ सकते हैं।
tandrewnichols

17
: [एन] बीडी [एलीट] [!] *: बीडी * *: बीडीएल * *: बीडेलीट * * ई ५१६ *
: bd [elete] [!] [N]
                बफ़र को अनलोड करें [N] (डिफ़ॉल्ट: वर्तमान बफ़र) और इसे से हटाएं
                बफर सूची। यदि बफर बदल दिया गया था, तो यह विफल हो जाता है,
                जब तक [!] निर्दिष्ट नहीं किया जाता है, जिस स्थिति में परिवर्तन खो जाते हैं।
                फ़ाइल अप्रभावित रहती है। इस बफ़र के लिए कोई भी विंडो हैं
                बन्द है। यदि बफर [N] वर्तमान बफर है, तो दूसरा बफर
                इसके बजाय प्रदर्शित किया जाएगा। इसमें सबसे हाल की प्रविष्टि है
                एक बफ़र में इंगित करता है कि कूद सूची।
                वास्तव में, बफर पूरी तरह से हटा नहीं है, इसे हटा दिया गया है
                बफर सूची से | अनलिस्टेड-बफर | और विकल्प मान,
                चर और मैपिंग / बफर के लिए संक्षिप्त रूप हैं
                मंजूरी दे दी।

9

यदि आपने अंतिम फ़ाइल पहले ही सहेज ली है, तो :enewआपका मित्र है ( :enew!यदि आप अंतिम फ़ाइल को सहेजना नहीं चाहते हैं)। ध्यान दें कि मूल फ़ाइल अभी भी आपकी बफ़र सूची (एक के माध्यम से सुलभ :ls) में होगी।


6

यदि आप किसी फ़ाइल को संशोधित करते हैं और विम को छोड़े बिना और सहेजे बिना इसे बंद करना चाहते हैं, तो आपको टाइप करना चाहिए :bd!


3

:bdमैप किया जा सकता है। मैं इसे मैप करता हूं F4, Shift- F4अगर मुझे कुछ बदलाव की वजह से बल-बंद करने की आवश्यकता है, जो मुझे अब नहीं चाहिए।


2

Bufkill.vim प्लगइन कहते हैं BD(जैसा कि किसी भी विभाजन को बन्द करने के बफर नष्ट करने के लिए आदि, bd) अकेला होगा।


1

अपनी .vimrc फ़ाइल में निम्न सम्मिलित करें और दबाने पर F4, यह वर्तमान फ़ाइल को बंद कर देगी।

:map <F4> :bd<CR>


-1

मेरे पास एक ही मुद्दा है इसलिए मैंने प्लगइन बनाया। यह प्लगइन प्रतिस्थापित करता है: q और अन्य कमांड और फिर विंडो को बंद होने से रोकें।

यदि आपके पास अभी भी समस्या है, तो कृपया निम्न प्लगइन का उपयोग करने का प्रयास करें। https://github.com/taka-vagyok/prevent-win-closed.vim

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