2009-11-28 13 views
9

क्या वीआईएम एक गुना के लिए हेडर के रूप में उपयोग की जाने वाली लाइन पर स्वरूपण लागू करने का कोई तरीका है?वीआईएम फोल्ड हेडर में सिंटैक्स हाइलाइटिंग

int foo(int a, int b) { 
    int c; 
.... 
} 

जब मुड़ा हुआ, मैं देख रहा हूँ:

+-- 4 lines: int foo(int a, int b) {---------------------------- 

हालांकि, पूरे लाइन "मुड़ा" वर्ग के अनुसार हाइलाइट किया गया है

जैसे, मैं निम्नलिखित कोड है। क्या इसे अक्षम करने का कोई तरीका है, इसलिए मैं सिंटैक्स हाइलाइटिंग देखना जारी रखता हूं?

[एक सरल उदाहरण यह इतना महत्वपूर्ण नहीं है के लिए है, लेकिन मैं भी बड़े डेटा फ़ाइलों को देखने में बड़े पैमाने पर तह का उपयोग, और वहाँ स्वरूपण मेरे लिए बहुत अधिक महत्वपूर्ण है]


उत्तर

7

"हालांकि, पूरी लाइन को" फोल्ड "वर्ग के अनुसार हाइलाइट किया गया है। क्या इसे अक्षम करने का कोई तरीका है, इसलिए मुझे सिंटैक्स हाइलाइटिंग देखना जारी है?"

नहीं, गुना शीर्षक शीर्षक टेक्स्ट नहीं है जो फ़ाइल का हिस्सा है और सीधे संपादन योग्य नहीं है, बस स्क्रीन पर गणना और ओवरलैड है। 'फोल्ड' हाइलाइट पूरी लाइन पर लागू होता है, और सभी फ़ोल्डरों में एक ही हाइलाइटिंग लागू होती है।

विम के साथ एक आउटलाइनर (विमऑटलिनर प्रोजेक्ट में) के रूप में मेरे उपयोग के लिए मैंने विम स्रोत को हैक किया है ताकि फोल्ड लेवल के आधार पर विभिन्न फोल्ड हाइलाइटिंग की अनुमति दी जा सके, इसलिए कई फ़ोल्ड हेडिंग हाइलाइट्स लागू हैं (जैसे FoldLevel1, FoldLevel2 , आदि।)। मुझे लगता है कि इसे फोल्ड हेड लाइन पर टेक्स्ट की पहले से मौजूद हाइलाइटिंग का उपयोग करने के लिए आगे हैक किया जा सकता है, लेकिन जिस तरह से फोल्डिंग काम करता है, मुझे संदेह है कि ऐसा लगता है कि ऐसा लगता है कि ऐसा करना मुश्किल हो सकता है।

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

5

मुझे लगता है कि तुम क्या ' फिर से मैन्युअल के बजाय इंडेंट में foldmethod बदल रहा है, जो डिफ़ॉल्ट है। इसे कमांड मोड में टाइप करें।

:set foldmethod=indent 

अब अगर आप अपने foo समारोह और प्रकार ZM (एक के बाद गुना स्तर को बढ़ाने के) के अंदर जाना है, यह इस तरह दिखेगा:

int foo(int a, int b) { 
+-- 2 lines: int c;------------------------------------------------------------ 
} 

foo लाइन अभी भी वाक्य रचना हाइलाइटिंग होगा। निश्चित रूप से प्रकट करने के लिए, zr टाइप करें। सुविधा के लिए मैं अपने .vimrc में निम्नलिखित कुछ लाइनें डाल जल्दी से गुना या सब कुछ प्रकट करना:

" Folding and unfolding 
map ,f :set foldmethod=indent<cr>zM<cr> 
map ,F :set foldmethod=manual<cr>zR<cr> 

वहाँ एक भी एक अच्छा ट्यूटोरियल here है, और निश्चित रूप से foldmethod पर vim मदद पढ़ने अन्य तरीकों पर ले सकता है कि आपको इंडेंट से बेहतर पसंद है, लेकिन जिस तरह से आपका उदाहरण कोड दिखता है, आप शायद इंडेंट चाहते हैं।

+0

प्रतिक्रिया के लिए धन्यवाद; शायद मुझे यह उदाहरण नहीं दिया जाना चाहिए था, हालांकि। आपकी टिप्पणियां सी कोड के लिए अच्छी हैं, लेकिन मैं अक्सर http://www.vim.org/scripts/script.php?script_id=158 का उपयोग करके टेक्स्ट फ़ाइलों को भी फोल्ड करता हूं। यह किसी भी समाधान – Mikeage

+2

पर खुद को उधार देने जैसा प्रतीत नहीं होता है, मुझे नहीं लगता कि अगर आप सादा पाठ फ़ाइलों को तब्दील कर रहे थे जो सिंटैक्स हाइलाइटिंग बहुत मायने रखती है (मैं एक उदाहरण देखने के लिए उत्सुक होगा), लेकिन अगर यह वही प्रकार करता है विचार लागू होता है।यदि आप उस रेखा के नीचे गुना शुरू करते हैं जिसे आप सिंटैक्स हाइलाइट करना चाहते हैं, तो आपको अभी भी उस रेखा को देखना चाहिए जिसे आप सही ढंग से हाइलाइट करना चाहते हैं। – mmrobins

+0

@mmrobins, क्या आप एक गुना रेखा पर पायथन सिंटैक्स को हाइलाइट करने के बारे में इस प्रश्न को देखकर दिमाग में देखेंगे (http://stackoverflow.com/questions/8655799/syntax-highlight-python-in-a-vim-fold-line) और यह संभव है कि यह संभव है और इस काम को करने के लिए मुझे क्या बदलने की आवश्यकता हो सकती है पर कुछ इनपुट प्रदान करना? –

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