विम में कई गुना


9

मैं vim के फोल्डिंग विकल्प का काफी उपयोग करता हूं , और आमतौर पर फोल्डमेथोड को सिंटैक्स में सेट करता हूं । हाल ही में मुझे पता चला कि कस्टम फोल्ड को जोड़ना संभव है, जैसे कि मैं पूरे ब्लॉक डाल सकता हूं /*{{{*/और /*}}}*/जो स्रोत फ़ाइल के बड़े वर्गों को एक साथ समूहित करने के लिए बहुत उपयोगी है। हालाँकि उस सुविधा का उपयोग करने के लिए मुझे मार्कर पर फोल्डेमेथोड सेट करने की आवश्यकता है, और मैंने सिंटैक्स तह को ढीला कर दिया है।

क्या विम में एक ही समय में दो सक्रिय फोल्डेमेथोड होना संभव है? set foldmethod=syntax,markerकाम नहीं करता।

जवाबों:


4

नहीं, कड़ाई से यह कहना संभव नहीं है कि एक ही समय में विम में कई फोल्डेमेथोड सक्रिय हों।

आप मार्कर आधारित तह का अनुकरण कर सकते हैं यदि आप सिंटैक्स हाइलाइटिंग नियमों को लिखना सीखना चाहते हैं और जिस भाषा में आप मार्कर फोल्डिंग एमुलेशन जोड़ना चाहते हैं उसके लिए हाइलाइटिंग फ़ाइल को हैक कर सकते हैं। ऐसा करने से कुछ कमियां हैं:

  1. एक गुना ("zf", "zd" और इतने पर) बनाने / हटाने के लिए कमांड जो मार्कर और मैनुअल फोल्डिंग विधियों के साथ काम करते हैं, जब foldmethod "सिंटैक्स" पर सेट नहीं होता है।

  2. मार्करों का अनुकरण करना जो गुना स्तर को "बल" (उदाहरण के लिए " {{{1/" }}}1") के रूप में बढ़ाता है / एक से गुना स्तर को कम करने के विपरीत (जैसे" {{{"/" }}}") समस्याग्रस्त है; या तो आपको तह स्तर की संख्याओं को पूरी तरह से अनदेखा करना है, या मौका लेना है कि आप के साथ हस्तक्षेप करेंगे - और संभवतः ब्रेक-बाकी सिंटैक्स आधारित तह नियम।

मेरा सुझाव है कि जब आपको लगता है कि आपको मार्कर आधारित तह की आवश्यकता है, तो आप पूरी तरह से उस पद्धति का उपयोग करते हैं। यह कुछ अतिरिक्त समय और प्रयास ले सकता है, लेकिन अगर आपको वास्तव में लचीलेपन की आवश्यकता है तो यह इसके लायक हो सकता है, विशेष रूप से दोनों को संयोजित करने की कठिनाइयों पर विचार करना।


2

मैं उसी चीज की तलाश में था। चूँकि मैं सिंटैक्स फ़ाइल को हैक नहीं करना चाहता, इसके बजाय मुझे foldmethods के बीच टॉगल करने के लिए मैपिंग करनी है। अभी मैं केवल सिंटैक्स और मार्कर के बीच स्विच करता हूं:

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.