कमांड लाइन में संस्करण के लिए वर्तमान फ़ाइल नाम को लाएं


10

मैं कमांड लाइन में वर्तमान फ़ाइल के लिए पथ कैसे ला सकता हूं, ताकि एक समान फ़ाइल नाम टाइप कर सके? मैं एक संक्षिप्त नाम नहीं चाहता हूं जिसे वर्तमान फ़ाइल नाम से बदल दिया जाएगा, मैं फ़ाइल नाम को संपादित करना चाहता हूं, इसकी निर्देशिका पथ के साथ पूर्ण। उदाहरण के लिए, मैं :editएक समान नाम वाली फ़ाइल या एक समान निर्देशिका में उदा चाहता हूँ

vim src/submodule/frontend/frobnicate2.c

और अब मैं संपादित करना चाहता हूं ../trunk/src/submodule/frontend/frobnicate.c, और मैं केवल सम्मिलित करना चाहता हूं ../trunkऔर हटाना चाहता हूं 2, न कि पूर्ण पथ को फिर से लिखना।

मैं निश्चित रूप से शेल पर वापस जा सकता हूं और इसके कमांड इतिहास का उपयोग कर सकता हूं, या मैं जीयूआई के माध्यम से पथ को कॉपी-पेस्ट कर सकता हूं, लेकिन मैं एक अधिक कुशल तरीके की तलाश कर रहा हूं जिसमें विम को छोड़ने की आवश्यकता नहीं है।

जवाबों:


11

%अपने आप को खोजने के रूप में रजिस्टर डालने के अलावा , आप भी उपयोग कर सकते हैं :edit %<Tab>

से :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

इसलिए, उदाहरण के लिए, आप इसका उपयोग कर सकते हैं:

:edit %.orig

संपादित करना file.txt.orig। अपने उदाहरण के लिए, आप टाइप करेंगे :e ../trunk/%, <Tab>फ़ाइल नाम को संबंधित पथ के साथ दबाएं , और 2दबाने से पहले हटा दें <Enter>

आप इसे संशोधित करने के लिए पथ में कुछ संशोधक जोड़ सकते हैं; मैं :hविशेष रूप से उपयोगी पाया गया, यह वर्तमान के "विराम" (या "सिर" विम-स्पीक ") में मिलता है:

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

तुम भी :hकई बार उपयोग कर सकते हैं । उदाहरण के लिए:

:edit %:h:h:h/file.txt

खुलेगा file/in/a/deeply/file.txt

वहाँ भी है :pजो आपको पूरा रास्ता देता है और जो आपके मामले में उपयोगी हो सकता है: टाइप करें :e %:p, दबाएं <Tab>और इच्छानुसार पथ को संपादित करें। तुम भी कई संशोधक का उपयोग कर सकते हैं, उदाहरण के लिए :e %:p:h:।

:help filename-modifiersपूरी सूची देखें

नोट: यदि आप <Tab>, विम का विस्तार करेंगे %। यदि आप उपयोग करते हैं <C-d>, तो विम विस्तार नहीं करेगा %(लेकिन %पथ को पूरा करते समय स्थानापन्न करता है )।


5

ओह। "फ़ाइल नाम" के लिए खोजें :help :! यह सरल है: विशेष आर egister सम्मिलित करने के लिए , जिसका अर्थ है वर्तमान फ़ाइल नाम।CTRL-R %%


1
इसलिए, आपके उत्तर पर निर्माण: ओपी के अनुरोध के अनुसार पूरा रास्ता पाने के लिए, आप कुछ ऐसा करेंगे Ctrl-r =expand('%:p')। यह = रजिस्टर का उपयोग करता है ।
lcd047

3

यदि आपने अपना vim pathवैरिएबल सेट किया है , तो आपके पास :findकमांड की पूरी शक्ति है , अर्थात् फ़ाइल नामों का टैब-पूरा (निर्देशिका भाग निर्दिष्ट करने की आवश्यकता के बिना!)

आपके मामले में, कुछ इस तरह

set path=./**

:fin frob<tab>काम करने के लिए आपकी जरूरत हो सकती है रक्तमय जानकारी के लिए, , ।:help find:help file-searching


0

यहाँ एक मानचित्रण है जिसे आप आज़मा सकते हैं:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

यह करंट कमांड को सेव करता है और फिर 'a' को करंट फाइल के नाम पर सेट करता है। फिर अंतिम कमांड को 'ए' रजिस्टर सामग्री के साथ वापस बुलाया और जोड़ा जाता है। बेशक, यदि आपके पास 'ए' रजिस्टर में कुछ उपयोगी है तो यह इसे अधिलेखित कर देगा।

आप मैप किए गए वर्णों को कुछ और में बदलना चाह सकते हैं। मुझे Alt कुंजी का उपयोग करना पसंद है लेकिन यह कुछ टर्मिनलों में काम नहीं करता है।

जैसा कि कार्पेटस्मोकर ने अपने उत्तर में बताया कि आप फ़ंक्शन कॉल को बदल सकते हैं

expand('%:p')

पूरा रास्ता तय करने के लिए।


1
यह निरर्थक रजिस्टर को निरूपित करेगा a। इसके बजाय कुछ इस तरह आज़माएँ:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.