vim कमांड जो करेगा: बफ़ या: e यदि फ़ाइल पहले से बफर में नहीं है?


3

मूल रूप से मेरा वर्कफ़्लो इस प्रकार है, मेरे पास नियमित विम में एक टर्मिनल में विभाजन का उपयोग करके खुली खिड़कियों का एक गुच्छा है। कभी कभी मैं कभी कभी मैं मैं आमतौर पर के बीच स्विच नहीं है एक फ़ाइल खुला है :bufऔर :tagफ़ाइल प्राप्त करने के लिए। आदर्श रूप से मैं कुछ ऐसा चाहूंगा जो काम करेगा :bufलेकिन यदि फाइल वर्तमान में बफर में नहीं है तो यह ए प्रीफॉर्म होगा :e

इसलिए सरल बनाने के लिए:

मैं :bufफ़ाइल नाम का एक भाग टाइप करता हूं और <tab>इसे हिट करता हूं, यह मुझे फाइलों और मैचों के लिए मैच देता है, जितना कि अगर मैं चाहता हूं कि फाइल पहले से ही बफर में नहीं है तो मैं उस फाइल को टाइप करने में सक्षम होना चाहूंगा नाम और यह फ़ाइल लोड है। आमतौर पर अब मुझे वापस जाना है और कमांड को ए से बदलना :buf [file]है :e [file]

क्या कोई ऐसा कमांड बनाने का कोई तरीका है जो काम करेगा :bufलेकिन फाइल को खोलना है अगर यह पहले से मौजूद नहीं है? जिस कारण से मैं :bufशुरू करने के लिए उपयोग करता हूं , वह कुछ निर्देशिकाओं में फ़ाइलों की गुंजाइश को सीमित करता है और टैब मारते समय उनका मिलान करेगा। मुझे आशा है कि मैंने इसे सही ढंग से समझाया :)।

उदाहरण:

:buf FooX[tab]

4 फाइलें दिखाता है और है

:buf [very long path]/FooX

अब अगर उपसर्ग FooX के साथ सटीक फ़ाइल नहीं दिखाई गई है, तो मैं अभी भी टाइप करने में सक्षम होना चाहता हूं FooXFileNotShown.cppऔर इसे एक लोड की तरह लोड कर सकता हूं :e

आपकी सहायता के लिये पहले से ही धन्यवाद।

जवाबों:


1

:b[uffer]केवल खुले बफ़र्स तक पहुँचने के लिए उपयोग किया जाता है। इसके पूर्ण होने की "गुंजाइश" "कुछ निर्देशिकाओं" तक ही सीमित नहीं है, बल्कि आपकी बफर-सूची / तर्क-सूची में बफ़र्स के लिए है। आप उस कमांड का उपयोग उस फाइल को खोलने के लिए नहीं कर सकते हैं जो पहले से नहीं खुली थी।

:e[dit]एक फ़ाइल को संपादित करने के लिए प्रयोग किया जाता है और इसका पूरा होना Vim की कार्यशील निर्देशिका के तहत सीधे फाइलों और निर्देशिकाओं के लिए "स्कोप" होता है। आप wildignoreविकल्प ( :help 'wildignore') या भयानक **वाइल्डकार्ड ( :help starstar) का उपयोग करके पूर्ण सूची को सीमित कर सकते हैं ।

जब आप :eपहले से ही बफर-सूची / तर्क-सूची में एक फ़ाइल को संपादित करने के लिए उपयोग करते हैं , तो विम एक नया बफर नहीं बनाता है, यह धीरे-धीरे मौजूदा बफर पर स्विच करता है, जैसे प्रभावी रूप से कार्य करता है :b

तो ... ऐसा लगता है कि आप के व्यवहार के बारे में थोड़ा भ्रमित हैं :bऔर आप बस देख रहे हैं :e file<Tab>


2 आदेशों के बारे में भ्रमित नहीं ... यदि आपके पास एक फ़ाइल है <लंबा रास्ता> /fileA.cpp आप टाइप कर सकते हैं: buf fileA <टैब> और यह पथ के साथ पूरी फ़ाइल का समाधान करेगा। यह नहीं होता है: ई जो प्रश्न का पूरा बिंदु था।
bjackfly

ठीक है, मुझे आपके शब्द "फ़ाइल" के अति प्रयोग के कारण आपके प्रश्न से बिल्कुल नहीं मिला। आपको जो मिलता :b fileA<Tab>है, वह एक बफर का नाम है, जिसे अपेक्षाकृत कम सूची में विम द्वारा संग्रहीत किया गया है, लेकिन यह सूची गैर-खोली गई फ़ाइलों के लिए मौजूद नहीं है, केवल खोले गए बफ़र्स के लिए है। वास्तविक फ़ाइलनामों पर इस तरह के पूर्ण होने के लिए, आपके फ़ाइल सिस्टम को स्कैन किया जाना चाहिए, उस स्कैन के परिणाम को कैश किया जाना चाहिए और इसी तरह। :findकम या ज्यादा की तरह काम करता है लेकिन बड़ी निर्देशिका संरचनाओं पर बहुत धीमा हो सकता है । मेरा सुझाव है कि आप Ctrl और समान प्लगइन्स पर एक नज़र डालें।
रोमेनिल

ठीक है धन्यवाद मुझे लगता है कि मुझे लगता है कि गैर-खुली फाइलों के लिए टैग कमांड का उपयोग करना होगा
bjackfly

1

तो आप मौजूदा बफ़र्स को पूरा करने के साथ एक कमांड चाहते हैं, फिर या तो बफर (यदि मौजूदा है) को खोलता है, या फिर आपको E94: No matching bufferत्रुटि देने के बजाय पारित फ़ाइल को संपादित करता है ।

इस बारे में कैसा है:

:command! -nargs=1 -complete=buffer Buf try | execute 'buffer' <q-args> | catch /^Vim\%((\a\+)\)\=:E94/ | execute 'edit' <q-args> | endtry

कस्टम कमांड को अपरकेस अक्षर से शुरू होना चाहिए, लेकिन आप cmdalias.vim का उपयोग करते हैं - मौजूदा :bufकमांड को अधिभार करने के लिए विम कमांड प्लगइन के लिए उपनाम बनाएँ

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