विम में कर्सर के नीचे एक फ़ाइल बनाएँ


10

मेरे पास फाइलों की एक सूची है

file1.ext
file2.ext
...

यदि मेरा कर्सर file2.ext के अंदर है, तो मैं file2.ext नाम से एक फ़ाइल कैसे बनाऊं। gfकेवल नई फ़ाइलों को बनाने के लिए की तरह (यह एक काल्पनिक स्थिति है, बस सोचा था कि किसी दिन सहायक हो सकता है)।

जवाबों:


17

पहली बात जो मेरे दिमाग में आती touchहै, वह यह है कि इसे पास करने वाले कमांड का उपयोग कर्सर के नीचे फाइलनेम के लिए किया जाए।

:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

लेकिन प्लेटफार्मों में एक शुद्ध विम समाधान पोर्टेबल है। अंतर्निहित फ़ंक्शन writefileफ़ाइल की सूची, लाइन द्वारा लाइन में लिखता है। स्वाभाविक रूप से, जब इनपुट सूची खाली होती है, तो यह एक खाली फ़ाइल बनाता है। ( :help writefileविवरण देखें।) हम इस दुष्प्रभाव का लाभ उठा सकते हैं:

:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

ध्यान दें कि फ़ाइल नाम निष्कर्षण को एक अलग expandपैटर्न (देखें :help expand()) का उपयोग करके समायोजित किया जा सकता है ।

वैसे, अगर कोई फ़ाइल बनाना नहीं चाहता है, लेकिन संपादन के लिए इसे खोलना है, तो कोई एक समान gfमैपिंग को परिभाषित कर सकता है :

:map <leader>gf :e <cfile><cr>

जहां :eकमांड को :tabeएक समान कमांड के साथ बदला जा सकता है ।


1
शिक्षण के लिए +1 <cfile>के बजाय<C-r><C-f>
sehe

2

मैंने ऊपर ib द्वारा उत्कृष्ट उत्तर लिया और इसे निम्नानुसार विस्तारित किया। मेरा लक्ष्य विकी के लिए आवश्यकतानुसार नई मार्कडाउन फाइलें बनाने के लिए विम का उपयोग करना था (इस मामले में एक गोलम विकि)

मैंने पहली बार कोशिश की:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

जैसा कि उत्तर में कहा गया है ऊपर काम करता है। हालाँकि, पहले मुझे लगा कि यह काम नहीं कर रहा है क्योंकि मैंने वास्तव में फ़ाइल को खोलना नहीं देखा था। नीचे दिए गए दूसरे बिट कोड का उपयोग करने से एक नई फ़ाइल खुल जाएगी - यह वही है जो मैं देख रहा था। इसलिए मैंने उन्हें संयुक्त किया और कोशिश की:

map <leader>cf :e <cfile><cr>

लेकिन यह विकी के लिए काम नहीं करता है क्योंकि जब आप विकी में सिंटैक्स का उपयोग करके विकी में एक नई फ़ाइल बनाने का प्रयास करते हैं जैसे [[the-new-file]]कि कोष्ठक में फ़ाइल के विस्तार की अनुमति नहीं देता है। हालांकि, विम को इस काम के लिए एक नई फ़ाइल बनाते समय विस्तार को जानना होगा। इस मामले में मैंने इस्तेमाल किया:

    map <leader>cf :e <cfile>.md<cr>

इसलिए मैं नई मार्कडाउन फाइलें बना सकता हूं। इसे और अधिक अनुकूलित करने के तरीके हैं (उदाहरण के लिए विस्तार को हार्डकोड करके नहीं) लेकिन उपरोक्त मेरी आवश्यकताओं के लिए ठीक काम करता है। अगर मुझे कभी भी एक और एक्सटेंशन की आवश्यकता होती है (उदाहरण के लिए .wiki फ़ाइल को बचाने के लिए) तो मैं शायद केवल सरल मार्ग ले लूंगा और एक और नक्शा बनाऊंगा जैसे:

    map <leader>cwf :e <cfile>.wiki<cr>

साइड बेनिफिट के रूप में आप पहले से मौजूद मार्कडाउन फाइल को खोलने के लिए उसी कमांड का उपयोग कर सकते हैं (मानक gfकमांड यहां काम नहीं करेगा क्योंकि फाइल एक्सटेंशन गायब है)।


gfअगर काम करता है set suffixesadd=.wiki। आपका एक बेहतर संस्करण cfएक ऐसा होगा जो suffixesaddकम से कम उस मामले में सम्मान करता है , जिसमें केवल एक आइटम होता है।
hjdivad
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.