मैं वर्तमान फ़ाइल को विम में कैसे हटा सकता हूं?


85

मैं डिस्क से वर्तमान खुली फ़ाइल को विम से कैसे हटा सकता हूं? बफर को भी बंद करना अच्छा होगा।

मैं देखता हूं कि आप उसके लिए NERDTree का उपयोग कर सकते हैं , लेकिन मैं इस प्लगइन का उपयोग नहीं करता हूं।

जवाबों:


102

Rm (1) जैसे बाहरी उपकरण का उपयोग करना ठीक है, लेकिन delete()फ़ाइलों को हटाने के लिए विम का अपना कार्य भी है । यह पोर्टेबल होने का फायदा है।

:call delete(expand('%'))

इसे व्यक्त करने का एक वैकल्पिक तरीका है :call delete(@%), जो %(वर्तमान फ़ाइल) रजिस्टर (@accolade द्वारा टिप) का उपयोग करता है ।

वर्तमान बफ़र को पूरी तरह से शुद्ध करने के लिए, डिस्क और विम बफर पर दोनों फ़ाइल प्रतिनिधित्व, संलग्न करें :bdelete:

:call delete(expand('%')) | bdelete!

आप शायद अपनी प्राथमिकताओं के अनुसार इसे मैप करना चाहेंगे।


7
धन्यवाद! .Vimrc में निम्नलिखित मानचित्र काम करता है nnoremap rm :call delete(expand('%')) \| bdelete!<CR>:। आप अपने उत्तर में जोड़ना चाह सकते हैं।
फोटान्यूस

13
वह मानचित्रण आदर्श नहीं है। हम rकमांड को तोड़ना नहीं चाहते हैं ! अपने मानचित्रण के साथ बेहतर उपसर्ग करें <Leader>...
glts

2
मैंने इसे Ctrl + Del का उपयोग करके मैप किया, nnoremap <C-Del> :call delete(expand('%'))<CR>लेकिन दुर्घटना होने पर मैं बफर को बंद नहीं करता; फिर भी आपके पास इसे बचाने का मौका है।
इवगेनी सर्गेव

3
:call delete(@%)|q!It लघु संस्करण (यदि आप इसे मैप नहीं करना चाहते हैं)। (बफर में रहता है :lsऔर :bइस तरह से पुनर्जीवित किया जा सकता है ; यह फ़ाइल नाम और बफर विकल्प को बरकरार रखता है, लेकिन फ़ाइल सामग्री को नहीं।)
हारून थोमा

2
@accolade, मैं अपने चाल की तरह है, लेकिन आप का उपयोग करने की आवश्यकता होगी :call delete(@%)|bd!और उपयोग :ls!के साथ :bपुनर्जीवित करने के लिए।
बार्ट लोवर्स

87

Vim कमांड से डिलीट फाइल्स पर एक नजर । टिप्पणियाँ अनुभाग में आप जो खोज रहे हैं होना चाहिए:

असल में, आरएम वर्तमान फ़ाइल को हटा देगा; RM वर्तमान फ़ाइल को हटा देगा और बफर (बिना बचत) को एक बार में छोड़ देगा।

वैकल्पिक रूप से, आप वर्तमान फ़ाइल को निकालने के लिए शेल कमांड जारी कर सकते हैं:

:!rm %

1
यह इतना सरल है कि मैं लगभग विश्वास नहीं कर सकता कि मुझे इसके लिए एक स्क्रिप्ट बनाने की आवश्यकता है। धन्यवाद।
फॉटेनस

3
के साथ हटाना !rm %, क्या कोई चेतावनी से बचने का एक तरीका है जब विम बफर पर वापस आ जाता है?
फोटानस

1
फ़ाइल नाम के कुछ विशेष वर्णों के साथ, यह कमांड काम नहीं करेगा, जैसे अगर फ़ाइल का नाम 20130711-कॉन्टेक्ट्स # 285.vcf है, जिसमें स्थान है, तो यह 'rm:' 20130711-कॉन्टैक्ट्स को हटा नहीं सकता ': ऐसी कोई फ़ाइल नहीं है निर्देशिका '
सईद

4
@ saeed144, फ़ाइल नाम में रिक्त स्थान के मामले में (या अन्य वर्ण जो आप शेल स्तर पर व्याख्या नहीं करना चाहते हैं), आप %उद्धरण के साथ फ़ाइल नाम ( ) को घेरना चाहेंगे !rm "%":।
डेविड कैन

8
आंकड़े की चेतावनी! बस के साथ %(filepath ( " फ़ाइल नाम " vim शब्दावली में) मूल रूप से लागू किया, संभावित रिश्तेदार, जैसे सिर्फ फ़ाइल के नाम के रूप में) के बजाय %:p(निरपेक्ष filepath) आप के बजाय एक और निर्देशिका में एक ही नाम के एक फ़ाइल को हटाने का जोखिम का एक छोटा सा चलाने के लिए, अगर आप भूल गए हैं तो आप :cdवहां एड करें। इसलिए मैं दृढ़ता से %:pइसके बजाय %अगर आप इसे वैसे भी मैप करने की सलाह देते हैं ।
आरोन थोमा

25

कभी-कभी एक साधारण समस्या के लिए भी एक प्लगइन एक आकर्षक समाधान हो सकता है। इस मामले में हम भाग्यशाली हैं क्योंकि सर्वशक्तिमान टिम पोप द्वारा eunuch.vim है।

अपने शब्दों में eunuch.vim प्रदान करता है

UNIX शेल आदेशों के लिए विम चीनी जो इसकी सबसे अधिक आवश्यकता है। एक ही समय में एक बफर और अंतर्निहित फ़ाइल को हटाएं या नाम बदलें। क्विकफ़िक्स सूची में लोड करें findया locateडालें। और इसी तरह।

उत्तम। यदि हमारे पास UNIX सिस्टम है, तो इसके लिए हमें कुछ अतिरिक्त टूल की आवश्यकता है।

जिस कमांड की आपको तलाश है

:Remove!

फिर से, इसे रिमैप करें यदि आपको इसकी बहुत आवश्यकता है, जैसे :nnoremap <Leader>rm :Remove!<CR>


मुझे प्लगइन्स के बिना करने का एक तरीका दिख रहा था, इसलिए मैं आपके अन्य उत्तर को स्वीकार करूंगा। प्लगइन अच्छा लग रहा है :-)
fotanus

यदि आप के vim तरीके की जरूरत है इस प्लग बहुत सुविधाजनक है mv, mkdir, find, आदि अत्यधिक की सलाह देते हैं।
एहतेश चौधरी

4

मुझे विम के भीतर से फ़ाइलों को हटाने में सक्षम होना पसंद है, लेकिन मैं गलती से महत्वपूर्ण काम को हटाने के बारे में भी पागल हूं, जो एक कारण या किसी अन्य के लिए, अभी तक संस्करण नियंत्रण में नहीं है। मुझे इस उत्तर के साथ @glts और @accolade से पिछली जानकारी को जोड़ना उपयोगी लगता है कि कैसे confirmvim छोड़ने से पहले कमांड का उपयोग करना है ।

इन्हें एक साथ रखते हुए, मैंने अपने साथ एक फंक्शन जोड़ा ~/.vimrc, जो फ़ाइल को हटाने और बफर को बंद करने से पहले संकेत देता है, और इसे एक कुंजी संयोजन के लिए मैप किया गया है:

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()

fun! DeleteFileAndCloseBuffer()
  let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
  if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun

यदि आप मेरी तुलना में एक कीस्ट्रोके कम पागल हैं, तो आप <CR>पहली पंक्ति में जुड़ सकते हैं

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>

और केवल एक बार रिटर्न प्रेस करना होगा।


1
जब भी आप इसे लिपिबद्ध करते हैं, मैं expand('%:p')इसके बजाय दृढ़ता से उपयोग करने की सलाह देता हूं @%। (जब मैंने चापलूसी की कि आपने मेरे संकेत को शामिल किया है :) एक स्क्रिप्ट में संक्षिप्तता का लाभ मामूली है। इससे भी महत्वपूर्ण बात %:p:) फ़ाइलनाम को एक पूर्ण निरपेक्ष पथ पर विस्तारित करेगा (जो यह पहले से हो सकता है या नहीं भी हो सकता है)। बस के साथ %आप एक ही नाम की फ़ाइल को किसी अन्य निर्देशिका में हटाने का एक छोटा जोखिम चलाते हैं, अगर आप :cdवहां एड भूल गए हैं ।
आरोन थोमा

1
कि बाहर pionting के लिए धन्यवाद! मैंने उसी हिसाब से अपना जवाब अपडेट किया।
joelostblom

0

आप इसे दो चरणों में कर सकते हैं:

  1. एक नई फ़ाइल के रूप में सहेजें

    : w newfilename

  2. पुरानी फ़ाइल को हटाएं

    ! rm oldfilename


0

यह एक अलोकप्रिय राय हो सकती है लेकिन आपकी फ़ाइल ट्री एक्सप्लोरर (Netrw / NerdTree) एक फ़ाइल को हटाने का सबसे सरल और सुरक्षित तरीका होने जा रहा है। भले ही ओपी NerdTree का उपयोग नहीं कर रहा है, इन-बिल्ट प्लगइन Netrw बस के रूप में भी काम करेगा।

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