আমি ইনডেন্টের সাথে ভাঁজ পছন্দ করি তবে ভাঁজগুলিতে মন্তব্যগুলি অন্তর্ভুক্ত করি (আমি বোঝাতে চাই প্রতিটি মন্তব্য আগের লাইনের মতো ভাঁজের সমান স্তর পায়)।
দুর্ভাগ্যক্রমে, ফোল্ডাইনোর কীওয়ার্ডটি কেবল একটি লাইনের মন্তব্যের জন্য কাজ করে। সুতরাং আমি vimrc এ এক্সপ্রেসের সাথে ভাঁজ করছি:
set foldmethod=expr
set foldexpr=FoldMethod(v:lnum)
function! FoldMethod(lnum)
"get string of current line
let crLine=getline(a:lnum)
" check if empty line
if empty(crLine) "Empty line or end comment
return -1 " so same indent level as line before
endif
" check if comment
let a:data=join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
if a:data =~ ".*omment.*"
return '='
endif
"Otherwise return foldlevel equal to indent /shiftwidth (like if
"foldmethod=indent)
else "return indent base fold
return indent(a:lnum)/&shiftwidth
endfunction
শেষ ব্লক:
indent(a:lnum)/&shiftwidth
ইনডেন্টে একটি ফোল্ডলেভেল বেস প্রদান করে।
এবং অন্যটি:
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
লাইনটির প্রথম অক্ষরটি সিনট্যাক্সের সাথে মন্তব্য হিসাবে বিবেচনা করা হয় কিনা তা পরীক্ষা করে। সুতরাং ইনডেন্ট এবং সিনট্যাক্স ফোল্ডিংকে এক্সপ্রেশন দিয়ে একীভূত করার একটি ভাল উপায়, সর্বাধিক উন্নত ভাঁজ।
মনে রাখবেন যে আপনি ফলাফলটি কেমন দেখতে চান তার উপর নির্ভর করে আপনি "ফোল্ডেক্সটও সেট" করতে পারেন।