2009-04-12 13 views
26

में वर्तमान फ़ाइल का नाम प्राप्त करें मैं उस फ़ाइल का नाम ढूंढने की कोशिश कर रहा हूं जिसे मैं विम के अंदर संपादित कर रहा हूं। तो मैं इस फ़ाइल को संकलित करने के लिए F5 मानचित्र करने के लिए इसका उपयोग कर सकता हूं। अगर मैं फ़ाइल प्रारूप को पहचान सकता हूं और तदनुसार संकलक चुन सकता हूं, लेकिन वास्तव में आवश्यक नहीं है तो निश्चित रूप से बहुत अच्छा होगा। अगर मुझे फ़ाइल का नाम मिलता है, तो मैं खुद ऐसा कर सकता हूं। लेकिन मैं वास्तव में उस फ़ाइल का नाम पाने के लिए कोई रास्ता नहीं ढूंढ सकता जिसे मैं संपादित कर रहा हूं।विम

मुझे :make कमांड के बारे में पता है, और पहले से ही मैप किया है, लेकिन छोटी स्क्रिप्ट/परीक्षण कार्यक्रमों के लिए, मैं वास्तव में पहले एक साधारण मेकफ़ाइल लिखना नहीं चाहता हूं।

+1

http://stackoverflow.com/q/916875/80161 और http://stackoverflow.com/q/2233905/80161 –

+4

और लोगों को यह करने के लिए समान है से अधिक उम्र के समान। – martiert

+0

कोई संदेह नहीं है। मैं "लिंक" सूची में जोड़ता हूं लेकिन अभी तक अनुमति नहीं है। –

उत्तर

22

मैं उस फ़ाइल का नाम ढूंढने की कोशिश कर रहा हूं जिसे मैं विम के अंदर संपादित कर रहा हूं।

वर्तमान बफर इस फ़ाइल की आप नाम दे देंगे के लिए,

echo "You're editing " bufname("%") 

(बस कुछ file.vim में रख, और स्रोत यह ": तो%"। लेकिन मुझे नहीं पता अगर मैं फ़ाइल प्रारूप पहचान सकता है, और उसके अनुसार संकलक चुनें लगता है। यह तुम क्या जरूरत है

तो मैं उपयोग कर सकते हैं F5 मैप करने के लिए परीक्षण प्रयोजनों के लिए इस फ़ाइल को संकलित करने के लिए,। निश्चित रूप से चाहेंगे महान हो, लेकिन वास्तव में जरूरी नहीं है। अगर मुझे ना मिल जाए मुझे फाइल का, मैं खुद ऐसा कर सकता था। लेकिन मैं वास्तव में उस फ़ाइल का नाम पाने के लिए कोई रास्ता नहीं ढूंढ सकता जिसे मैं संपादित कर रहा हूं।

आप कई चीजें कर सकते हैं। यदि vim आपके द्वारा संपादित की जा रही फ़ाइल प्रकार को पहचानता है, तो आप अपने कंपाइलर कमांड पर F5 मैप कर सकते हैं और उस कमांड को अपनी विशिष्ट ftplugin निर्देशिका में डाल सकते हैं, इसलिए यह केवल उस फ़ाइल प्रकार के लिए मान्य होगा।उदाहरण के लिए, आप cpp.vim, fortran.vim, python.vim, आदि में

nmap <f5> :!compilername %<cr> 

डाल % आप संपादित कर रहे हैं वर्तमान फ़ाइल का नाम देता है। यह संकलक को निष्पादित करेगा जैसे कि आपने कमांड प्रॉम्प्ट में compilername file.cpp कहा था।

बेशक, compilername प्रत्येक फ़ाइल प्रकार के लिए अलग होगा; आप सीपीपी कंपाइलर के साथ फोर्ट्रान संकलित नहीं करेंगे, आप उस मामले में fortrancompiler % डाल देंगे।

यह एक विकल्प है। आप अपने .vimrc में एक्सटेंशन सेट autocmd कमांड के अनुसार भी कोशिश कर सकते हैं, इसलिए यह फ़ाइल के विस्तार के अनुसार फ़ाइल प्रकार को पहचानता है। यह विम का सभी मानक उपयोग है, कुछ भी असामान्य नहीं है। अब, मुझे यकीन नहीं है कि आप इसके बारे में कैसे जाना चाहते हैं, इसलिए मैं आपको Vim Wiki पर इंगित करूंगा जहां आप इसे कवर करने वाले सभी प्रकार के लेख ढूंढ सकते हैं (और कुछ कंपेलरों के लिए कुछ सुझाव भी)।

मैं :make आदेश के बारे में पता है, और पहले से ही उस मैप किया गया है, लेकिन छोटे लिपियों/परीक्षण कार्यक्रमों के लिए, मैं वास्तव में नहीं है पहले एक सरल makefile लिखने के लिए करना चाहते हैं।

हाँ, यह ओवरकिल जैसा लगता है। व्यक्तिगत रूप से (जब मैं विंडोज़ पर हूं), मुझे बड़ी बैच फ़ाइल को बड़ी परियोजनाओं को छोड़कर ज्यादातर चीजों के लिए लिखना बहुत आसान लगता है। यदि कार्यक्रम एक या दो फाइलों में है, तो मैं इसे कुछ ऑनलाइनर मैपिंग का उपयोग करके संकलित करता हूं।

25

आप एक्सटेंशन के साथ वर्तमान फ़ाइल नाम प्राप्त करने के लिए vim कमांड में% वर्ण का उपयोग कर सकते हैं। उदाहरण के लिए,

:!javac %

वर्तमान फ़ाइल पर javac चलाने के लिए। w:

आप के साथ और अधिक

:help filename-modifiers

2

खैर पता कर सकते हैं, यह जैसी चीजों के अंदर एक प्रतिस्थापन कोड के रूप में % है। तो : डब्ल्यू ब्लैह% आपकी फ़ाइल की प्रतिलिपि 'blah' के साथ प्रीपेड के साथ लिखता है। या !! echo% इसके साथ मौजूदा लाइन को प्रतिस्थापित करता है। डुनो अगर यह आपकी जरूरतों को संबोधित करता है या नहीं।

3

जैसा कि पहले से ही उल्लेख किया गया है, % वर्तमान फ़ाइल में विस्तारित किया गया है। यदि आप उस स्ट्रिंग को विम स्क्रिप्ट में प्राप्त करना चाहते हैं, तो expand("%") का उपयोग करें।

लेकिन आप बस "compiler-command\ %" जैसे मेकप्रग को सेट करना चाहते हैं और :make चलाएं - आपको इस तरह से त्वरित-ठीक समर्थन प्राप्त होता है। (:copen के साथ खुली त्रुटियों/चेतावनी विंडो)

5

अन्य अंक बहुत उपयोगी हैं। मैं जोड़ूंगा कि आप शायद इसका उपयोग करना चाहते हैं: पी, यह सुनिश्चित करने के लिए कि फ़ाइल का नाम पूरी तरह से योग्य पथ के रूप में पारित किया गया हो। इसके बिना, विम इसे एक पथ के रूप में पास कर सकता है जो कि विम के वर्तमान पथ से संबंधित है, जो संकलक के उपयोग के समान पथ हो सकता है या नहीं भी हो सकता है। तो एक समाधान है:

nnoremap <silent> <f5> :!javac %:p<cr> 

आप फ़ाइल प्रकार का पता लगाने के लिए स्वचालित रूप से आप अपने फ़ाइल नाम के लिए एक विकल्प के रूप में AutoCommand

autocmd FileType java  nnoremap <buffer> <silent> <f5> :!javac %:p<cr> 
autocmd FileType cpp  nnoremap <buffer> <silent> <f5> :!gcc %:p<cr> 
+0

+1। लेकिन आपको cpp फ़ाइल के लिए gcc के बजाय g ++ का उपयोग करना चाहिए, अन्यथा आपको एक त्रुटि होगी। – duleshi

2

उपयोग % इस्तेमाल कर सकते हैं चाहते हैं। लेकिन व्यक्तिगत रूप से, मुझे सच में लगता है कि आप जो भी चाहते हैं उसे करने के लिए :make दबा सकते हैं।

मैं वही करना चाहता था जो आप टालना चाहते हैं: बस मेरे द्वारा किए गए प्रत्येक फ़ोल्डर के लिए दो-पंक्ति मेकफ़ाइल को हैक करें। मैंने :make का क्विकफ़िक्स समर्थन इतना आनंद लिया कि दो-पंक्ति मेकफ़ाइल को मारना बस लग रहा था बड़ी तस्वीर में एक छोटे से ऊपर की तरह।

... मैंने तब से बेहतर सीखा है। वर्तमान फ़ाइल प्रकार के आधार पर अपनी पसंद के आदेश का उपयोग करने के लिए :make को कॉन्फ़िगर करने, makeprg विकल्प को सेट करने के लिए आप एक autocmd या ftplugin का उपयोग कर सकते हैं। अपने आप में, यह आपको थोड़ा सा काम बचाता है।

समस्या तब शुरू होती है जब हम ऐसे उपकरण को काम करते हैं जिसका त्रुटि संदेश जीसीसी की तरह दिखता नहीं है। इसके आसपास जाने के लिए, vim errorformat विकल्प भी प्रदान करता है। errorformat बहुत परिष्कृत है। यदि आप वास्तव में इसके बारे में जानना चाहते हैं, तो :h error-format से शुरू करें। लंबी अवधि में, परिष्कार वास्तव में महान है। इसका मतलब यह है कि, एक बार जब आप इसका उपयोग कैसे करें, तो आप लगभग किसी भी कंपाइलर आउटपुट को पार्स कर सकते हैं और इसे Quickfix (:cope या :cl) के साथ देखने के लिए प्रारूपित कर सकते हैं।

अल्पावधि में, यह एक बुरी चीज हो सकती है, क्योंकि इसका मतलब है कि आप पहली बार एक त्रुटि प्रारूप को अपने साथ जोड़ते हैं, तो आप थोड़ा सा समय बिता रहे हैं vimdocs और पुनः लोडिंग और फ़ाइलों का निर्माण जो आपके संकलक द्वारा उत्पन्न विभिन्न त्रुटि संदेशों को ट्रिगर करेगा। यह निश्चित रूप से नहीं है कि आप क्या चाहते हैं यदि आप केवल अपने आराम क्षेत्र के बाहर काम कर रहे हैं, या आपका मालिक आपके कंधे पर है, तो आप इस बग को ठीक करने के लिए आग्रह करते हैं अब

उम्मीद है कि (और संभावित), कोई पहले से ही आप के लिए यह दर्द के माध्यम से चला गया है, और या तो अपने डिफ़ॉल्ट ftplugin के लिए उचित रूप errorformat कॉन्फ़िगर किया गया है, या एक vim स्क्रिप्ट है कि वे सिर्फ समुदाय को स्थापित करने के लिए प्रतीक्षा कर रहे हैं के हिस्से के रूप में जारी और पूजा करो।

एक त्वरित प्रदर्शन के रूप में, यहाँ लाइनों की एक जोड़ी मैं अपने .vim/ftplugin/haskell.vim फ़ाइल के लिए एक साथ काट दिया गया है:

setl makeprg=ghc\ --make\ % 
setl errorformat=%E%f:%l:%c:,%C\ %.%m,%Z,%f:%l:%c:%m 

मैं setl यहाँ उपयोग करती हैं इसलिए कि ये विकल्प केवल Haskell स्रोत फ़ाइलों के लिए कॉन्फ़िगर किया गया है; अगर मैं एक अलग प्रकार की स्रोत फ़ाइल को एक साथ संपादित करता हूं, तो यह इसके बजाय एक अलग कॉन्फ़िगरेशन का उपयोग कर सकता है।

यदि आप :make का उपयोग कर समाप्त करते हैं, तो मैं आपके switchbuf सेटिंग को कॉन्फ़िगर करने की भी अनुशंसा करता हूं। अगर मुझे क्विकफिक्स उत्साहित हो जाता है और आपको गलत फाइल पर कूदता है तो मुझे बिल्ड के बाद ctrl-O दबाकर थोड़ा परेशान लगता है। मैं का उपयोग करें:

set switchbuf=useopen,usetab,newtab