মন্তব্য ভাঁজ কিভাবে?


16

বাক্য গঠনটি foldmethodদুর্দান্ত, তবে কখনও কখনও আমি মন্তব্যগুলি কোনও উত্স ফাইলে ভাঁজ করতে চাই।

এছাড়াও মন্তব্যের সিনট্যাক্স ভাঁজ কেবল সি-স্টাইলের মতামতের জন্য যেমন কাজ করে:

/*
 ...
 */

তবে মন্তব্য বয়লারপ্লেটের মতো নয়:

//
//
// ...
//

এমনকি সি-নন মতো ভাষায় মন্তব্য ব্লকগুলির মতো:

#
#
# ...
#

আমি কীভাবে এটি ভিএম দিয়ে কনফিগার করতে পারি?


আপনি কি সিনট্যাক্স ভাঁজ এবং মন্তব্য ভাঁজ ব্যবহার করতে চান ? নাকি কেবল মন্তব্য ভাঁজ?
মার্টিন টর্নয়েজ

@ কার্পেটসমোকার, সিনট্যাক্স ফোল্ডিং + কমেন্ট ফোল্ডিং ঠিক আছে যদি কেউ 'মন্তব্য বাদে সমস্ত ভাঁজ খুলুন' বলতে পারেন। অন্যথায়, সিনট্যাক্স ভাঁজ না করে মন্তব্য ভাঁজ করা ভাল হবে।
maxschlepzig

উত্তর:


14

শুধুমাত্র মন্তব্যগুলি ভাঁজ করা ব্যবহার করে মোটামুটি সহজ foldmethod=expr:

set foldmethod=expr foldexpr=getline(v:lnum)=~'^\s*'.&commentstring[0]

এটি সহজেই পরীক্ষা করে দেখবে যে লাইনটি কোনও পরিমাণ সাদা অংশ + একটি মন্তব্য চরিত্রের সাথে শুরু হয় কিনা। মনে রাখবেন যে এটি মোটামুটি নিষ্পাপ, এবং সমস্ত ভাষার জন্য কাজ নাও করতে পারে। সুতরাং আপনি আরও সুনির্দিষ্ট হওয়ার জন্য একটি অটোক্যামড ব্যবহার করতে চাইতে পারেন:

autocmd FileType c setlocal foldmethod=expr foldexpr=getline(v:lnum)=~'^\s*//'
autocmd FileType python setlocal foldmethod=expr foldexpr=getline(v:lnum)=~'^\s*#'

ভাঁজ-এক্সটার সম্পর্কে আরও তথ্যের জন্য, দেখুন:


সিনট্যাক্স ভাঁজ এবং মন্তব্য ভাঁজ ব্যবহার আরও জড়িত; এর জন্য সিনট্যাক্স ফাইলটি পরিবর্তন /usr/share/vim/vim74/syntax/*.vimকরতে হবে এবং আপনি যে ভাষাটি ব্যবহার করছেন তা সুনির্দিষ্ট হবে।

লক্ষ্য করুন যে কিছু ফাইল টাইপ ইতিমধ্যে এটি করেছে! উদাহরণস্বরূপ থেকে ruby.vim:

if !exists("ruby_no_comment_fold")
  syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyC
  syn region rubyDocumentation    start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
else
  syn region rubyDocumentation    start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
endif

2

আমি ইনডেন্টের সাথে ভাঁজ পছন্দ করি তবে ভাঁজগুলিতে মন্তব্যগুলি অন্তর্ভুক্ত করি (আমি বোঝাতে চাই প্রতিটি মন্তব্য আগের লাইনের মতো ভাঁজের সমান স্তর পায়)।

দুর্ভাগ্যক্রমে, ফোল্ডাইনোর কীওয়ার্ডটি কেবল একটি লাইনের মন্তব্যের জন্য কাজ করে। সুতরাং আমি 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")') )

লাইনটির প্রথম অক্ষরটি সিনট্যাক্সের সাথে মন্তব্য হিসাবে বিবেচনা করা হয় কিনা তা পরীক্ষা করে। সুতরাং ইনডেন্ট এবং সিনট্যাক্স ফোল্ডিংকে এক্সপ্রেশন দিয়ে একীভূত করার একটি ভাল উপায়, সর্বাধিক উন্নত ভাঁজ।

মনে রাখবেন যে আপনি ফলাফলটি কেমন দেখতে চান তার উপর নির্ভর করে আপনি "ফোল্ডেক্সটও সেট" করতে পারেন।


0

আপনি দৃশ্যমানভাবে মন্তব্য করা ব্লকটি নির্বাচন করতে পারেন vacএবং তারপরে একটি ম্যানুয়াল ফোল্ড তৈরি করতে পারেন zf

মন্তব্য পাঠ্য অবজেক্টটি স্ট্যান্ডার্ড ভিএম টেক্সট অবজেক্টগুলির সেট করতে ভাষা বর্ধন হতে পারে। এটি গো সিনট্যাক্স দিয়ে পরীক্ষা করেছে।


1
প্রকৃতপক্ষে, acএকটি অন্তর্নির্মিত না। তবে টিপোপের মন্তব্য সহ gcএকটি পাঠ্য অবজেক্ট। সুতরাং ভালো সমাধান হয় zfac, zfgcঅথবা zfipনাহয়
ডি বেন Knoble
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.