एक विम स्क्रिप्ट अभिव्यक्ति सेट set foldmethod=expr
करने के 'foldexpr'
लिए क्या करें और उपयोग करें जो गुना प्रारंभ बिंदुओं को परिभाषित करेगा।
set foldmethod=expr
set foldexpr=get(split(getline(v:lnum-1)),0,'')!=get(split(getline(v:lnum)),0,'')?'>1':'='
यह जितना दिखता है उससे अधिक जटिल है, क्योंकि हम आसानी से रिक्त स्थान का उपयोग नहीं कर सकते हैं :set
, लेकिन रिक्त स्थान और एक नई पंक्ति या 2 के साथ, यह इस तरह दिखता है:
get(split(getline(v:lnum - 1)), 0, '') != get(split(getline(v:lnum)), 0, '')
\ ? '>1'
\ : '='
अवलोकन
मूल रूप से यह पिछली पंक्ति के साथ प्रत्येक पंक्ति के पहले शब्द की तुलना करता है। शब्द अलग कर रहे हैं तो लाइन, गुना के शुरू है >1
। अन्यथा यह एक ही गुना स्तर रखता है =
,।
विवरण की महिमा
set foldmethod=expr
तह को निर्धारित करने के लिए विम स्क्रिप्ट अभिव्यक्ति का उपयोग करने के लिए विम को बताने के लिए
'foldexpr'
विकल्प विम लिपि अभिव्यक्ति को धारण करता है
- एक टर्नरी के साथ स्थिति का मूल्यांकन करना जो
>1
एक गुना शुरू होना चाहिए और =
जब गुना स्तर जारी रहना चाहिए
v:lnum
मौजूदा लाइन है जो 'foldexpr'
सिलवटों को अद्यतन करने के लिए चल रही है
- सामग्री को वर्तमान लाइन (
v:lnum
) और पिछली पंक्ति ( v:lnum - 1
) के माध्यम से प्राप्त करेंgetline()
- प्रत्येक पंक्ति को शब्दों के माध्यम से विभाजित करें
split()
get()
ताजा विभाजित शब्दों का पहला सूचकांक प्राप्त करने के लिए उपयोग करें
''
रिक्त पंक्ति के मामले में एक डिफ़ॉल्ट मान का उपयोग करें । जैसेget(words, 0, '')
- वर्तमान रेखा के पहले शब्द की तुलना टर्नरी के स्थिति भाग में पिछली पंक्ति के पहले शब्द से करें
नोट: इस विधि में बहुत बड़े दस्तावेज़ों के साथ कुछ प्रदर्शन समस्याएँ हो सकती हैं
अधिक मदद के लिए देखें:
:h 'foldmethod'
:h 'foldexpr'
:h getline(
:h v:lnum
:h split(
:h get(