2012-05-24 12 views
8

मैंने विम में एक फ़ंक्शन बनाया जो मेरे लिए कुछ सामान संकलित करता है। यह बहुत दिखाई देता है:क्विकफिक्स विंडो में फ़ाइल पथ Vim

function! MyFunc(mode) 
    lcd ./build 
    pwd 
    let &makeprg='the_command some_script_file' 
    let &errorformat='some format'.',' 
    let &errorformat.='%-G%.%#' 
    silent make 
    lcd .. 
    cwindow 
endfunction 

मैं एक परियोजना निर्देशिका में आमतौर पर खुला vim, तो मैं इस समारोह है, जो सीडी के निर्माण में, यह बनाता है, और सीडी की पीठ तो मैं अपने प्रोजेक्ट निर्देशिका में रहने चला सकते हैं।

हालांकि, कभी-कभी, जब निर्माण विफल हो जाता है और क्विकफ़िक्स विंडो लाता है, तो यह मेरे प्रोजेक्ट डीआईआर (याय) के सापेक्ष फ़ाइल नाम दिखाएगा, लेकिन दूसरी बार उसी फ़ाइल में, यह पूर्ण पथ दिखाता है। बिल्ड स्क्रिप्ट का आउटपुट हमेशा सापेक्ष पथ दिखाता है, और विम दोनों सही तरीके से संभालता है, यानी यह सही फ़ाइल पाता है।

मुझे संदेह है कि पथ प्रबंधन जिम्मेदार है। मेरा सवाल है, समस्या क्या है, और क्या निर्माण निर्देशिका में स्विचिंग को संभालने का एक बेहतर तरीका है? मैं हमेशा दिखाए गए सापेक्ष पथ चाहता हूं।

धन्यवाद !!

उत्तर

3

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

यदि आपको वास्तव में :lcd का उपयोग करने की आवश्यकता है, तो स्थान सूची (:lmake) का उपयोग करना बेहतर होगा, क्योंकि यह विंडो के लिए भी स्थानीय होगा। लेकिन मैं पहले वैश्विक :cd का उपयोग करने की कोशिश करता हूं, क्योंकि स्विच केवल अस्थायी है, वैसे भी, और अब तक आप वास्तविक मूल मूल्य को पुनर्स्थापित करने की परवाह नहीं करते हैं।

+0

यह सच है। मैं इसे बाद में एक शॉट दूंगा और वापस रिपोर्ट करूंगा। – Christoph

0

जैसा कि इंगो ने इंगित किया है, पथ त्वरित विंडो की वर्तमान निर्देशिका से संबंधित हैं, जो पिछली विंडो से विरासत में मिला है।

आप निष्पादन से पहले सही पथ निर्धारित करने के लिए autocmd QuickFixCmdPre का उपयोग कर सकते हैं।

यदि आप Project Root plugin का उपयोग जोड़ने के अपने .vimrc के लिए निम्न:

augroup changeQfCmdDir 
    au! 
    autocmd QuickFixCmdPre make ProjectRootCD 
augroup END 

, तो QuickFix खिड़की के रास्ते से पहले यह (आप भी अन्य आदेशों की एक संख्या निर्दिष्ट कर सकते हैं एक :make द्वारा भरा जाता है को सुधार दिया जाएगा कि Quickfix विंडोज का उपयोग करता है: grep,lgrep,cscope)।