2010-12-24 17 views
9

मैं विम और लोक निर्माण विभाग रिटर्नहो रही है संबंधित पथ

/home/rafid/myproject 

चला रहा हूँ कहो और कहते हैं कि मैं वर्तमान फ़ाइल

/home/rafid/myproject/website/editpage.php 

वहाँ किसी भी आदेश है कि मेरे लिए यह रिटर्न है संपादन कर रहा हूँ?

website/editpage.php 

यही है, वर्तमान फ़ोल्डर से संबंधित फ़ाइल का पथ।

उत्तर

4

यह मेरे लिए काम करता है:

:echo expand("%") 
+0

बढ़िया! यह मेरे लिए भी काम करता है। – Rafid

+3

वर्तमान फ़ाइल नाम डालने के लिए आप डालने मोड में '%' का उपयोग भी कर सकते हैं। –

+1

यह हमेशा काम नहीं करता है और इस बात पर निर्भर करता है कि आपने शुरुआत में फ़ाइल को कैसे खोला था। अधिक संपूर्ण समाधान के लिए इस प्रश्न का @joeytwiddle का उत्तर देखें। – senbrow

0

हाँ, आप उपयोग कर सकते हैं

: आर्ग

यह आपको वर्तमान फ़ाइल का फ़ाइल नाम सूचना के प्रयोजनों के लिए, दे देंगे।

+0

ध्यान दें कि मुझे केवल फ़ाइल नाम नहीं चाहिए, मुझे सापेक्ष पथ चाहिए। तो सिर्फ editpage.php नहीं, बल्कि 'वेबसाइट/editpage.php'। – Rafid

+0

हां, यह इसे ध्यान में रखेगा। क्या तुमने कोशिश की? – kvista

9

एक अन्य विकल्प vim समारोह लिखने के लिए होगा। यहाँ मेरी विनम्र प्रयास है:

function! Relpath(filename) 
    let cwd = getcwd() 
    let s = substitute(a:filename, l:cwd . "/" , "", "") 
    return s 
endfunction 

आप किसी भी पूरा पथ नाम के साथ Relpath कहते हैं, और यह अपने तर्क से वर्तमान निर्देशिका नाम हटेगा।

उदाहरण के लिए, :echo Relpath(expand("%:p")) (:p संशोधक को पूर्ण पथ वापस करने के लिए विम से पूछें) का प्रयास करें। जाहिर है, यह आपके मामले में आवश्यक नहीं है, क्योंकि % स्वयं रिश्तेदार पथ देता है। हालांकि, यह अन्य मामलों में काम में आ सकता है।

+0

धन्यवाद, यह एक अच्छा है। – Rafid

1

आप autocmd का उपयोग करता है, तो हमेशा बफर के वर्तमान निर्देशिका है कि आप पर काम कर रहे (सीडी% ज: पी) स्थापित करने के लिए तो आप लिख सकते हैं: सीडी

+0

इस पृष्ठ पर लैंडिंग करने वाले अगले व्यक्ति को - autocmd http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file – molicule

0

Blockquote यह मेरे लिए काम करता है:
: गूंज ("%") का विस्तार

यह केवल यदि आप एक रिश्तेदार फ़ाइल के साथ कि फाइल खोली काम कर रहा है:

for vi ./foo, expand("%") will be ./foo 

लेकिन

for vi /tmp/foo expand("%") will be /tmp/foo 
+0

के साथ सीडी सेट करने के बारे में अधिक जानकारी के लिए इस विम टिप को देखें। अगर मैं '/ tmp' में हूं और 'vi/tmp/foo' करता हूं तो विम सापेक्षपथ को काम करता है, और' विस्तार ("% ") 'मुझे' foo' दिखाता है। ** हालांकि ** अगर मैं '/ tmp' में vim खोलता हूं और': e/tmp/bar' ** करता हूं तो ** 'विस्तृत करें ("%")' पूरा पथ दिखाएगा। – joeytwiddle

11

हालांकि expand('%') अक्सर काम करता है, वहाँ rare occasions हैं जहां ऐसा नहीं है। मैनुअल से

:echo fnamemodify(expand("%"), ":~:.") 

: लेकिन आप हमेशा fnamemodify फोन करके रिश्तेदार पथ पेश करने के लिए मजबूर कर सकते हैं विम

:.  Reduce file name to be relative to current directory, if 
      possible. File name is unmodified if it is not below the 
      current directory. 
      For maximum shortness, use ":~:.". 

:~ वैकल्पिक है। यदि संभव हो तो यह आपके घर फ़ोल्डर से संबंधित पथ को कम करेगा (~/...)। (दुर्भाग्यवश यह केवल पर आपके घर पर काम करता है; यह /home/joey~joey में नहीं बदलेगा।

:echo pathshorten('~/.vim/autoload/myfile.vim') 
~/.v/a/myfile.vim 

संदर्भ:: :h fnamem<Tab>)

आप अंतरिक्ष के लिए सीमित हैं, और जहां फ़ाइल स्थित है के बारे में "फजी" जानकारी के साथ प्रबंधन कर सकते हैं, तो pathshorten() जो एक चरित्र के लिए नीचे फ़ोल्डर नाम को संपीड़ित की जाँच और :h pathsh<Tab>

संबंधित मुद्दे