2012-02-19 15 views
54

में फ़ंक्शन बॉडी में तर्कों को हाइलाइट करें आईडीई से उधार लिया जा सकता है। तो विचार फ़ंक्शन निकायों के अंदर फ़ंक्शन तर्क (और हो सकता है कि वेरिएबल नाम स्कॉप्ड) को हाइलाइट करना होगा।विम

plain vim highlighting

ठीक है, मैं तर्क foo और bar एल्गोरिथ्म तर्क बेहतर पालन करने के लिए प्रकाश डाला देखना चाहेंगे अगर मैं func अंदर कर्सर रखने के लिए थे: यह कुछ सी के लिए डिफ़ॉल्ट व्यवहार है। ध्यान दें कि func2 में समान नाम प्राप्त नहीं होगा। यह लक्जरी हालांकि लोप हो सकता है ...

func hilighted

स्थानीय रूप से उपयोग करना scoped चर, मैं भी पसंद स्थानीय स्तर पर प्रारंभ कर दिया है चर highlit होगा:

highlight <code>i</code> inside for

अंत लक्जरी redemonstrate रहे हैं:

luxury again

इतना छोटा नहीं है इसे लिखें। मैंने सामान्य विचार देने के लिए सी का इस्तेमाल किया। वास्तव में मैं बेहतर योजना/Clojure प्रोग्रामिंग के लिए इसका उपयोग कर सकते हैं:

for clojure too inside let construct

यह उदाहरण के लिए let, loop, for, doseq बाइंडिंग की पहचान करनी चाहिए।

मेरा विस्क्रिप्ट-फू वह मजबूत नहीं है; मुझे संदेह है कि हमें

  • पार्स (गैर-regexply?) कर्सर के तहत फ़ंक्शन परिभाषा से तर्कों की आवश्यकता होगी। यह पाठ्यक्रम निश्चित रूप से विशिष्ट होगा। मेरी प्राथमिकता क्लोजर होगी।
  • एक वाक्य रचना क्षेत्र को परिभाषित दिया समारोह/कार्यक्षेत्र को कवर करने के लिए एक ही
  • आवश्यक वाक्य रचना से मेल खाता है

एक समारोह इस एक चाबी को मैप किया जा सकता है (अगर बहुत गहन संसाधन) या CursorMoved इसलिए यदि नहीं के रूप में देना धीमी गति से।

ठीक है, अब। क्या किसी ने इस तरह कुछ लिखा/पाया है? क्या विस्क्रिप्टक्रिप्ट गुरु के पास इस तरह की एक स्क्रिप्ट लिखना शुरू करने का विचार है?

मामूली ऑफटॉपिकनेस और खराब स्वरूपण के बारे में खेद है। संपादित/प्रारूप करने के लिए स्वतंत्र महसूस करें। या बंद करने के लिए वोट दें।

+2

सुपरकोल विषय। यह हाइलाइट वास्तव में एल्गोरिदम की पठनीयता में सुधार करता है। उस पर कुछ खबरें? – nkint

+0

यह सी/सी ++/ओबीजे-सी के लिए पूरी तरह से व्यवहार्य है। मुझे पता है कि वर्तमान कर्सर के दायरे के साथ-साथ वर्तमान फ़ंक्शन के हस्ताक्षर प्राप्त करने के लिए पाइथन/क्लैंग का उपयोग करना संभव है। स्रोत: http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/। इसके साथ एक विम प्लगइन लिखना मुश्किल नहीं होना चाहिए। –

+8

मैं पाठ के बजाय कोड की छवियों को पोस्ट करने के लिए आपको नीचे जाने के बहुत करीब था ... लेकिन फिर मैंने सवाल पढ़ा। ;) –

उत्तर

1

एक संभावित समाधान here पाया जा सकता है। सबसे अच्छा तरीका नहीं है क्योंकि यह पूरी फ़ाइल में हर घटना को हाइलाइट करता है और आपको हर बार आदेश देना पड़ता है (शायद दूसरे को टाला जा सकता है, पहले के बारे में नहीं पता)। हालांकि इसे एक नज़र दें।

+0

के लिए अच्छा चाल! लेकिन यह वाक्यविन्यास-जागरूक नहीं है। – viebel

+0

सामान स्वचालित रूप से पर्याप्त नहीं करता है। – progo

5

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

विम सिंटैक्स हाइलाइटर रेगेक्स से निपटने के लिए सीमित है, लेकिन यदि आप ऐसा करने पर नरक हैं, तो आप अपने स्वयं के पार्सर को विस्क्रिप्ट में रोल कर सकते हैं, और यह एक बफर-स्थानीय वाक्यविन्यास उत्पन्न करता है जो फ़ाइल में टोकन को संदर्भित करता है रेगेक्स में \% l और \% c परमाणुओं का उपयोग करके लाइन और कॉलम द्वारा। प्रत्येक बदलाव के बाद इसे फिर से शुरू करना होगा। दुर्भाग्य से "फ़ाइल बदली" के लिए कोई ऑटोकॉम नहीं है, लेकिन कर्सरहोल्ड ऑटोकॉम्ड है, जो तब चलता है जब आप कॉन्फ़िगर करने योग्य अवधि के लिए निष्क्रिय होते हैं।

+0

मैं सहमत हूं ... यह थोड़ा पागल है। लेकिन वहां अजगर/रूबी/स्कीम बाइंडिंग हैं। और उन भाषाओं में तीसरे पक्ष के पुस्तकालय हैं। शायद मुझे पूरी तरह से विमल होने के बारे में जोर देना चाहिए था। – progo