मैं विम में सामग्री में वर्तमान फ़ाइल नाम कैसे डालूं?


38

कुछ खोज के बाद, मुझे पता चला कि :echo @%vim-screen की निचली पंक्ति में वर्तमान फ़ाइल नाम प्रदर्शित करता है।

मैं फ़ाइलनाम की सामग्री के साथ फ़ाइल नाम (पूर्ण पथ के बिना) को छोड़ना चाहूंगा vim

क्या इसे करने का कोई तरीका है?

जवाबों:


27

मुझे यकीन है कि ऐसा करने के अन्य तरीके भी हैं ... लेकिन मुख्य कमांड :r[ead]जो आप चाहते हैं जो बफर में कमांड के आउटपुट को सम्मिलित करता है।

तो, केवल फ़ाइल नाम डालने के लिए:

:r! echo %

और, पूर्ण पथ को शामिल करने के लिए:

:r! echo %:p

अधिक जानकारी के लिए:

:help read
:help filename-modifiers 

37

वर्तमान फ़ाइल नाम "%रजिस्टर में है, इसलिए आप इसे (इन्सर्ट मोड में) डाल सकते हैं <c-r>%; पूर्ण पथ के साथ डाला जा सकता है <c-r>=expand("%:p")। यदि आप इसे अक्सर उपयोग करते हैं, तो आप इसका एक मैक्रो बना सकते हैं। अधिक, समान चाल के लिए, देखें :h expandऔर :h "=


हो सकता है कि मैं इसे गलत समझ रहा हूं, लेकिन इसे <c-r>फिर से कमांड के रूप में मैप नहीं किया गया है?
बजे जेसी यमकोस्की

10
सम्मिलित मोड में, <c-r>निर्दिष्ट करता है कि अगला वर्ण एक रजिस्टर है।
केविन

राइटो, धन्यवाद। पूरी तरह से मोड डालने के लिए स्विच करना भूल गया ...
जेसी यमकोस्की

आप "%pसामान्य या दृश्य मोड में भी कर सकते हैं।
n

15

जैसा कि देखा जा सकता है :h registers, "%रजिस्टर में वर्तमान फ़ाइल नाम है। :pu[t]आदेश पाठ में एक रजिस्टर की सामग्री को सम्मिलित करता है।

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

:put %

या

"%p

पूर्ण पथ के साथ फ़ाइल नाम सम्मिलित करने के लिए, टाइप करें

:put=expand('%:p')

कमांड मोड में।


और जानकारी:

:h pu[t]

टाइप करके "rpआप रजिस्टर की सामग्री को पेस्ट कर सकते हैं "r


3
:put "%:p"मेरे लिए काम करने के लिए प्रतीत नहीं होता। यह केवल विस्तार () के साथ काम करने लगता है , जैसे: :put =expand('%:p')इसमें <c-r>=expand('%:p')दुर्भाग्य से कम बोझिल नहीं है ।
अंकले

@akavel आप सही हैं, मैं उत्तर को अपडेट करूंगा। धन्यवाद! ;) और, वास्तव में, दोनों समान रूप से क्रिया हैं।
ब्राह्मणग्रीन

5

एक आसान तरीका है:

!!echo %
  • !! वर्तमान लाइन को कमांड के परिणाम के साथ प्रतिस्थापित कर रहा है।

  • % इसे कमांड में संपादित फ़ाइल के नाम से बदल दिया जाता है, इसलिए यह उस नाम को संपादित फ़ाइल में प्रभावी रूप से सम्मिलित करेगा।

फ़ाइल नाम वह है जिसे आप vi (m) कमांड में पास करते हैं और इसमें कोई रिश्तेदार या निरपेक्ष पथ हो सकता है। क्या आप इसे छीनना चाहते हैं और केवल फ़ाइल नाम को बनाए रखना चाहते हैं, चलाएँ

!!basename %

1

यदि आपको बार-बार ऐसा करने की आवश्यकता है, तो http://vim.wikia.com/wiki/Insert_current_filename के अनुसार, यह एक महत्वपूर्ण अनुक्रम बाँधने के लिए उपयोगी हो सकता है।

कर्सर स्थान पर एक्सटेंशन के बिना वर्तमान फ़ाइल नाम सम्मिलित करता है, जब आप सम्मिलित मोड में होते हैं।

:inoremap \fn <C-R>=expand("%:t:r")<CR>

विस्तार का उपयोग रखने के लिए:

:inoremap \fn <C-R>=expand("%:t")<CR>

निर्देशिका का पूर्ण पथ डालने के लिए फ़ाइल उपयोग में है:

:inoremap \fn <C-R>=expand("%:p:h")<CR>

निर्देशिका के सापेक्ष पथ को सम्मिलित करने के लिए फ़ाइल उपयोग में है:

:inoremap \fn <C-R>=expand("%:h")<CR>

उपरोक्त सभी vimसत्र के लिए सीधे काम करते हैं , या आप इसे .vimrc(जहां लाइन पर अग्रणी बृहदान्त्र वैकल्पिक है) में डाल सकते हैं ।


0

मैं वर्तमान स्थिति में कोई फ़ाइल नाम (पथ या विस्तार के बिना) (वर्तमान में कोई नई पंक्ति, कोई नई पंक्ति नहीं) सम्मिलित करने का सबसे सरल तरीका था। इसलिए पिछले उत्तरों और इस लिंक को मिलाकर , यही वह है जिसकी मुझे तलाश थी।

में डालने के मोड:

<C-R>=expand("%:t:r")

फिर अगली बार (इतिहास में पहले से ही कमान के साथ):

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