ভিমে মন্তব্য / অসম্পূর্ণ লাইনগুলির দ্রুত উপায় কী?


1167

আমার কাছে ভিবিতে একটি রুবি কোড ফাইল খোলা আছে, এখানে লাইনগুলি দিয়ে মন্তব্য করা হয়েছে #:

class Search < ActiveRecord::Migration
  def self.up
    # create_table :searches do |t|
    #   t.integer :user_id
    #   t.string :name
    #   t.string :all_of
    #   t.string :any_of
    #   t.string :none_of
    #   t.string :exact_phrase
    # 
    #   t.timestamps
    # end
  end

  def self.down
    # drop_table :searches
  end
end

বলুন যে আমি প্রথম def ... endবিভাগে সমস্ত লাইন uncomment করতে চান । ভিমে এটি করার একটি কার্যকর উপায় কী?

সাধারণভাবে, আমি মন্তব্য করার এবং সহজতর করার জন্য একটি সহজ এবং তরল উপায় খুঁজছি। এখানে আমি রুবি কোডটি ব্যবহার করছি, তবে এটি জাভাস্ক্রিপ্ট ( //) বা হামল ( -#) হতে পারে ।


20
গৃহীত উত্তরগুলির একটিতে পরিবর্তিত হওয়া উচিত যা প্লাগইন ব্যবহার না করে মন্তব্য করা / আপত্তিজনক ব্লকগুলি কীভাবে সম্পাদন করতে হবে সে সম্পর্কে বিস্তারিত নির্দেশাবলী রয়েছে। বর্তমান গৃহীত উত্তর মূলত একটি তৃতীয় পক্ষের প্লাগইন মাত্র একটি লিঙ্ক।
অলৌকিক চিহ্ন

সেরা রেট দেওয়া উত্তরে কোনও প্লাগইন উল্লেখ করা হয়নি, @ যুক্তরাষ্ট্রে আপনার মন্তব্যটি বিভ্রান্তিকর, আপনি দয়া করে এটি সংশোধন করতে পারেন বা এটি সরিয়ে দিতে পারেন, আপনাকে ধন্যবাদ।
বনোবো

উত্তর:


180

আমি এনইআরডি কমেন্টার স্ক্রিপ্ট ব্যবহার করি । এটি আপনাকে আপনার কোডটিতে সহজেই মন্তব্য করতে, অবিরাম বা টগল করতে দেয় lets

মতামত হিসাবে উল্লেখ করা হয়েছে :

যে কেউ ব্যবহারের দ্বারা বিভ্রান্ত হয়ে পড়েছে তার জন্য, ডিফল্ট লিডার "is" তাই 10 \ সিসি দশটি লাইন মন্তব্য করবে এবং 10 \ কিউ সেই দশটি লাইনকে অসন্তুষ্ট করবে


মজাদার! আমি ডকটি পড়েছি এবং সেখানে একটি "সেক্সি মন্তব্য" রয়েছে - কেবল "\ সিএস" ব্যবহার করুন। রুবির জন্য, এটি হ্যাশ ট্যাগগুলির পরিবর্তে একাধিক লাইন ব্যবহার =beginএবং =endমন্তব্য করতে পারবে ।
হেগউইন

আমি মনে করি যে এটি কোনও প্লাগইন ইনস্টল করার প্রয়োজন হওয়ায় এটি ভিআইএম দিয়ে করার দ্রুততম উপায় নয়। এছাড়াও সেরা উত্তরে ইতিমধ্যে আরও বেশি ভোট পেয়েছে তবে এটি সমাধান হিসাবে চিহ্নিত করা হয়নি।
whirmill

136
এখানে থামবেন না বেশিরভাগ ভোট দেওয়া উত্তরগুলি কোনও প্লাগইনগুলির প্রয়োজনীয়তা ছাড়াই নীচে রয়েছে। stackoverflow.com/a/15588798/2117868 এবং stackoverflow.com/a/1676690/2117868
kuttumiah

@ নিঃসন্দেহে আমি মনে করি "সেরা" সত্যিই ব্যবহারের ক্ষেত্রে নির্ভর করে। আমি যদি জীবনে একবার মন্তব্য টগল করতে চাই তবে ভিজুয়াল ব্লক মোডটি আরও দ্রুত। তবে যদি আমি কোনও প্লাগইন ইনস্টল করতে আপত্তি করি না এবং মন্তব্যগুলিতে টগল করার জন্য যতটা সম্ভব সম্ভব কয়েকটি কীস্ট্রোক করতে চাই এবং মন্তব্যগুলি যোগ করার বা অপসারণের মধ্যে অপারেশনকে আলাদা না করতে পারি - তবে এটি এখানে "সেরা উত্তর" হতে পারে।
ক্যারোলাস

@ কারোলাস আমি আপনার সাথে একমত হয়েছি যদি প্রশ্নটি "দ্রুত উপায় কী" এর পরিবর্তে "সেরা উপায় কী" দিয়ে শুরু হয়ে থাকে।
ভিরমিলে

2539

এই কাজের জন্য আমি বেশিরভাগ সময় ব্লক নির্বাচন ব্যবহার করি ।

আপনার কার্সারটি প্রথম অক্ষরটিতে রাখুন #, CtrlV(বা CtrlQজিভিমের জন্য) টিপুন এবং সর্বশেষ মন্তব্য করা রেখা অবধি নীচে যান এবং টিপুন x, যা সমস্ত #অক্ষরকে উল্লম্বভাবে মুছে ফেলবে ।

লেখার ব্লক মন্তব্য করার জন্য প্রায় একই রকম:

  1. প্রথমে আপনি মন্তব্য করতে চান এমন প্রথম লাইনে যান, টিপুন CtrlV। এটি সম্পাদককে VISUAL BLOCKমোডে রাখবে ।
  2. তারপরে তীর কীটি ব্যবহার করুন এবং শেষ লাইন পর্যন্ত নির্বাচন করুন
  3. এবার টিপুন ShiftI, যা সম্পাদককে INSERTমোডে রাখবে এবং তারপরে টিপবে #। এটি প্রথম লাইনে একটি হ্যাশ যুক্ত করবে।
  4. তারপরে টিপুন Esc(এটি একটি দ্বিতীয় দিন), এবং এটি #অন্যান্য নির্বাচিত সমস্ত লাইনে একটি অক্ষর সন্নিবেশ করবে ।

ডিবিয়ান / উবুন্টু ডিফল্টরূপে প্রেরিত ভিমের স্ট্রিপড ডাউন সংস্করণটির জন্য : s/^/#তৃতীয় ধাপে টাইপ করুন (প্রতিটি লাইনের প্রথম চরিত্রের কোনও অবশিষ্ট হাইলাইটিং এর সাথে মুছে ফেলা যাবে :nohl)।

ভিজ্যুয়াল রেফারেন্সের জন্য এখানে দুটি ছোট পর্দার রেকর্ডিং রয়েছে।

মন্তব্য: মন্তব্য

Uncomment: Uncomment


87
ডিফল্টরূপে এটি CTRL + V + Gvim এর উইন্ডোজ সংস্করণটি Ctrl + Q ব্যবহার করে কারণ Ctrl + V ইতিমধ্যে পেস্টের জন্য ব্যবহৃত হয়েছে।
আর মার্টিনহো ফার্নান্দেস

8
@amindfv Ctrl + V, n(যেখানে n সংখ্যা লাইন হয় - 1), জে, n(যেখানে মন্তব্যের অক্ষরের ক্রমের দৈর্ঘ্যের n সংখ্যা - 1), l, x।
michael.bartnett

27
আপনি '//' দিয়ে এটি কীভাবে করবেন?
অস্টিনটি

74
দ্বিতীয়টি অপেক্ষা না করার জন্য আপনি এস্কে দুবার ক্লিক করতে পারেন;)
আহমেদ হেগাজি

44
এটি আমার পক্ষে কাজ করে না। শিফট -১ সরল সন্নিবেশ মোডে গিয়েছিল।
জেরেমিয়া

826

ভিমে ব্লক মন্তব্য করতে:

  • টিপুন Esc(সম্পাদনা বা অন্যান্য মোড ছেড়ে)
  • হিট ctrl+ v(ভিজ্যুয়াল ব্লক মোড)
  • আপনার পছন্দসই লাইনগুলি নির্বাচন করতে / তীর কীগুলি ব্যবহার করুন (এটি সবকিছু হাইলাইট করে না - এটি ঠিক আছে!)
  • Shift+ i(প্রথম মূলধন)
  • আপনি যে পাঠ্যটি চান তা সন্নিবেশ করান %
  • প্রেস EscEsc

ভিএম-তে অবরুদ্ধ ব্লকগুলি:

  • টিপুন Esc(সম্পাদনা বা অন্যান্য মোড ছেড়ে)
  • হিট ctrl+ v(ভিজ্যুয়াল ব্লক মোড)
  • অসুবিধায়নের জন্য লাইনগুলি নির্বাচন করতে / তীর কী ব্যবহার করুন।

    আপনি যদি একাধিক অক্ষর নির্বাচন করতে চান তবে একটি ব্যবহার করুন বা এই পদ্ধতিগুলি একত্রিত করুন:

    • আরও পাঠ্য নির্বাচন করতে বাম / ডান তীর কীগুলি ব্যবহার করুন
    • পাঠ্যগুলির অংশগুলি নির্বাচন করতে shift+ / তীর কী ব্যবহার করুন
    • আপনি নিয়মিত মুছুন বোতামের মতো নীচে মুছুন কীগুলি বার বার চাপতে পারেন

  • প্রেস dবা xডিলিট অক্ষর, বারবার প্রয়োজনে

33
@ এমেলিয়া: মন্তব্য করার শর্টকাটটি আমার পক্ষে কাজ করে না। শিফট + i আমাকে মোড inোকাতে নিয়ে যায়। এটি কি ভিএম সংস্করণের উপর নির্ভর করে?
ব্যবহারকারী 3527975

7
এক সেকেন্ড লাগবে কেন?
কনর প্যাট্রিক

24
এই উত্তরের সাথে আমার একমাত্র সমস্যাটি হ'ল এটি আপনাকে তীরচিহ্নগুলি ব্যবহার করতে বলে ।
কোজাইকোনমোটেল

6
পরিবর্তে দুবার এস্ককে হিট করুন। :)
অ্যারন আলফোনাস

21
প্রথমে মন্তব্যগুলি সক্ষম করার পরে আমার পক্ষে কাজ হয়নি তবে পড়ার পরে আবারও ঠিকঠাক কাজ করেছে: ১. নিশ্চিত করুন যে আপনি সিটিআরএল-ভি ব্যবহার করেছেন, ভি নির্বাচনের জন্য নয় ২. এটি সন্নিবেশ করার সময় উপস্থিত হবে যখন আপনি কেবল একটি একক লাইন 3 পরিবর্তন করছেন। আপনি শেষের দিকে
এস্কে

333

কখনও কখনও আমি এমন একটি রিমোট বাক্সে ছাঁটাই হয়ে যাই যেখানে আমার প্লাগইনগুলি এবং .vimrc আমাকে সহায়তা করতে পারে না, বা কখনও কখনও NerdCommenter এটি ভুল হয়ে যায় (যেমন HTML এর অভ্যন্তরে জাভাস্ক্রিপ্ট এম্বেড করা হয়েছে)।

এই ক্ষেত্রে একটি স্বল্প প্রযুক্তির বিকল্প হ'ল বিল্ট-ইন normকমান্ড, যা সুনির্দিষ্টভাবে আপনার নির্দিষ্ট পরিসরের প্রতিটি লাইনে যেকোনও স্বেচ্ছাসেবক ভিএম কমান্ড চালায়। উদাহরণ স্বরূপ:

সাথে মন্তব্য # :

1. visually select the text rows (using V as usual)
2. :norm i#

এটি প্রতিটি লাইনের শুরুতে "#" সন্নিবেশ করায়। নোট করুন যে আপনি যখন টাইপ করবেন: পরিসরটি পূরণ করা হবে, তাই এটি সত্যিই দেখতে দেখতে লাগবে:'<,'>norm i#

বিরক্তিহীন # :

1. visually select the text as before (or type gv to re-select the previous selection)
2. :norm x

এটি প্রতিটি লাইনের প্রথম অক্ষর মুছে দেয়। যদি আমি //-র মতো 2-চরিত্রের মন্তব্য ব্যবহার করে থাকি তবে আমি :norm xxউভয় অক্ষর মুছতে কেবল করতাম ।

যদি মতামতগুলি ওপি-র প্রশ্নের মতো হয় তবে আপনার মুছে ফেলা এভাবে নোঙ্গর করতে পারেন:

:norm ^x

যার অর্থ "প্রথম অ-স্থানের অক্ষরে যান, তারপরে একটি অক্ষর মুছুন" নোট করুন যে ব্লক নির্বাচনের বিপরীতে, এই কৌশলটি মন্তব্যগুলিতে অসম ইন্ডেন্টেশন থাকলেও কাজ করে!

দ্রষ্টব্য : যেহেতু normআক্ষরিকভাবে কেবল নিয়মিত ভিএম কমান্ড কার্যকর করা হয়, আপনি মন্তব্যগুলিতে সীমাবদ্ধ নন, আপনি প্রতিটি লাইনে কিছু জটিল সম্পাদনাও করতে পারেন। আপনার কমান্ড সিকোয়েন্সের অংশ হিসাবে যদি আপনার পালানোর চরিত্রের প্রয়োজন হয় তবে ctrl-v টাইপ করুন তারপরে এস্কেপ কীটি চাপুন (বা আরও সহজ, কেবল একটি দ্রুত ম্যাক্রো রেকর্ড করুন এবং তারপরে প্রতিটি লাইনে সেই ম্যাক্রো কার্যকর করতে আদর্শ ব্যবহার করুন)।

দ্রষ্টব্য 2 : আপনি যদি নিজেকে normঅনেক বেশি ব্যবহার করে খুঁজে পান তবে অবশ্যই ম্যাপিং যুক্ত করতে পারেন । যেমন নীচের লাইনটি ~ / .vimrc এ স্থাপন করা আপনার ভিজ্যুয়াল নির্বাচন করার পরে ctrl-nপরিবর্তে টাইপ করতে দেয়:norm

vnoremap <C-n> :norm

দ্রষ্টব্য 3 : খালি-হাড় ভিমে কখনও কখনও normএটিতে কমান্ডটি সংকলিত থাকে না, তাই বিফ আপ সংস্করণটি অবশ্যই ব্যবহার করা নিশ্চিত করুন, সাধারণত / usr / bin / vim, / bin / vi নয়

(এই উত্তরে অন্তর্ভুক্ত উন্নতির জন্য @ মনব্রস্কি এবং @ ইরাক্লাইসকে ধন্যবাদ)


আমি ভেবেছিলাম এই উত্তরটি পড়ার জন্য আমি স্ক্রোল না করা পর্যন্ত এটি যাওয়ার উপায় ছিল stackoverflow.com/a/1676690/850996 CTRL + V (SHIFT + V এর সাথে লাইন নির্বাচনের বিপরীতে) ব্যবহার করে ব্লক নির্বাচনটি যেখানে মন্তব্যটি সেখানে আরও সুন্দর নিয়ন্ত্রণ দেয় চরিত্র সন্নিবেশ সঞ্চালিত হয়।
শ্যাম হাবারকদা

2
@ শায়াম সিআরটিএল-ভি কৌশলটি কেবলমাত্র বিশেষ ব্লক-বাছাই-কেবলমাত্র কমান্ডের সাথে মিলিয়ে অন্যান্য উত্তরগুলির বেশিরভাগই সুপারিশ করে; তবে ব্যক্তিগতভাবে আমি "আদর্শ" কৌশলটি সহজ বলে বর্ণনা করেছি কারণ এটি আদর্শ কমান্ড ছাড়াও কোনও নতুন সিনট্যাক্স প্রবর্তন করে না, তাই আমি ভিএম সম্পর্কে যা ইতিমধ্যে জানি তা পুনরায় ব্যবহার করতে পারি।
ম্যাগনাস

2
কোনও ইন্ডেন্টেড ব্লককে সংশোধন করার জন্য, এটি বলা কার্যকর :norm ^x। এই পদ্ধতিতে সাধারণভাবে অঞ্চল নির্বাচনের সাথে কাজ করার সুবিধা রয়েছে (উদাহরণস্বরূপ vi{কোঁকড়া ধনুর্বন্ধনী ভিতরে নির্বাচন করা হবে)। যেমন পাঠ্য অবজেক্ট নির্বাচনকারীরা কাজ করে না Visual Block
আইভান-কে

1
আহ, আমি এটি সন্ধান করেছি - সেন্টো 6 এ ভিএম /bin/vi7.2 রয়েছে, তবে এটি এর চেয়ে আলাদা বিল্ড /usr/bin/vim, এবং এতে বৈশিষ্ট্যগুলি বন্ধ রয়েছে।
রাকলাইস

3
এটি এখন পর্যন্ত সেরা উত্তর। বিশেষত যখন vipপুরো অনুচ্ছেদ নির্বাচন করার জন্য একত্রিত হয় ।
meh

121

আমার মধ্যে নিম্নলিখিত রয়েছে .vimrc:

" Commenting blocks of code.
autocmd FileType c,cpp,java,scala let b:comment_leader = '// '
autocmd FileType sh,ruby,python   let b:comment_leader = '# '
autocmd FileType conf,fstab       let b:comment_leader = '# '
autocmd FileType tex              let b:comment_leader = '% '
autocmd FileType mail             let b:comment_leader = '> '
autocmd FileType vim              let b:comment_leader = '" '
noremap <silent> ,cc :<C-B>silent <C-E>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR>
noremap <silent> ,cu :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR>

এখন আপনি ,ccএকটি লাইন মন্তব্য করতে এবং ,cuএকটি লাইনকে সংঘাত করতে টাইপ করতে পারেন (সাধারণ এবং ভিজ্যুয়াল মোডে উভয়ই কাজ করে)।

(আমি বহু বছর আগে এটি কোনও ওয়েবসাইট থেকে চুরি করেছি তাই এটি কীভাবে কাজ করে তা আমি সম্পূর্ণরূপে ব্যাখ্যা করতে পারি না :))। সেখানে একটি মন্তব্য রয়েছে যেখানে এটি ব্যাখ্যা করা হয়েছে))


আমার শর্টকাটটি কী ব্যবহার করা উচিত? আমি নিজেই ভিএম কোড থেকে নিশ্চিত করতে পারি না!
গিডিওন

স্বাভাবিক বা ভিজ্যুয়াল মোডে, বর্তমান লাইনটি মন্তব্য করতে ", সিসি" (3 টি চরিত্রের অনুক্রম) এবং বর্তমান লাইনটিকে সংকীর্ণ করতে ", সিইউ" ব্যবহার করুন।
ড্যান

8
আমি এটা পছন্দ করি :)! ধন্যবাদ! সাইড নোটে আমি ব্যাখ্যা করা কঠিন মনে করি না। ক) এটি একটি কমান্ড পুনরুদ্ধার করে (পুনরাবৃত্তির সাথে [এটি দেখুন] ( স্ট্যাকওভারফ্লো.com / উকশনস / ৩6776১১11/২ )) এখন আপনি যখন চাপবেন তখন সিসি: ... জিনিসটি কার্যকর হবে uted খ) এখন এটি মূলত একটি সেড (গুলি) / কি / তোহাত / কোথায়) কমান্ডটি opened (লাইনের শুরু) আপনি যে ফাইলটি খোলেন তার ধরণের ভিত্তিতে সঠিকভাবে সেট করা মন্তব্যের অক্ষরে পরিবর্তিত হবে সি) নিঃশব্দ জিনিসগুলি কেবল কমান্ড থেকে আউটপুট দমন করে। ডি): নোহলসার্ক সেড অনুসন্ধানটি হাইলাইট করা থেকে
থামিয়েছে

14
দ্রষ্টব্য, এটি স্বতঃসমানু লোড করার সঠিক উপায় নয়। এগুলি একটি অগ্রুপের অভ্যন্তরে থাকা উচিত অন্যথায় সেগুলি একাধিকবার ভিমে যুক্ত করা হবে এবং প্রচুর ধীরগতির কারণ হবে। দেখুন: learnvimscriptthehardway.stevelosh.com/chapters/14.html । আমি এই প্রশ্নের আমার উত্তর যোগ করেছি।

খুশী হলাম। এটি আপনার কাছে একটি ব্লক বাছাইয়ের সময় কীভাবে মন্তব্য করতে হবে (আনইন) করতে হবে সে বিষয়ে আমার প্রশ্নের আসল উত্তর।
এরউইন রুইজাকার্স

119

ভিমে কোন লাইনে মন্তব্য করবেন তা উল্লেখ করুন:

লাইন নম্বরগুলি প্রকাশ করুন:

:set number

তারপর

:5,17s/^/#/     this will comment out line 5-17

অথবা এটা:

:%s/^/#/        will comment out all lines in file

11
যেহেতু আপনি কেবল প্রতিটি লাইনের 1 ম চরটি পরিবর্তন করছেন, আপনার শেষে "g" লাগবে না
ম্যাগনাস

1
এম্বেড করা বাক্সে কিছু vims (openwrt মত) .. চাক্ষুষ মোড না থাকে তাই এই হল freaking সন্ত্রস্ত :)
kim0

আপনি ব্যাখ্যা করতে পারেন কেন :%s/^/#/gসমস্ত লাইনে মন্তব্য করা হবে? আমি শতাংশ সাইনটি নিয়ে ভাবছিলাম%
বিন

18
এবং এই লাইনগুলি সঙ্কোচিত করতে আপনি লিখতে পারেন: 5,17s / ^ # /
ইরাকলিস মৌটিডিস

গ্রেট! এটি ব্লক নির্বাচনের মতো: va{বা রুবির সাথে সত্যই দুর্দান্ত কাজ করে var
আর্তুর মায়েস্কি

58

এখানে আমি এটি কীভাবে করছি:

  1. আপনি যে মন্তব্য করতে চান সেই প্রথম লাইনে প্রথম চরিত্রে যান।

  2. Ctrl+ qজিভিআইএম বা Ctrl+ vভিআইএম- এ হিট করুন , তারপরে মন্তব্য করতে লাইনে প্রথম অক্ষর নির্বাচন করতে নীচে যান।

  3. তারপরে টিপুন c, এবং মন্তব্য অক্ষর যুক্ত করুন।

আনকমেন্টিং একইভাবে কাজ করে, মন্তব্য মন্তব্যের পরিবর্তে একটি স্থান টাইপ করুন।


44
cপ্রথম চরিত্রটিও মুছে দেয়। সিএমএসের উত্তরে ঠিক আছে অর্থাত্‍ টিপুন Iএবং তারপরে কমেন্টের অক্ষর (গুলি) লিখে তারপরে Esc(এটি উইন্ডো
ভিমে রয়েছে

6
'R' ব্যতীত এটি কাজ করে, 'সি' নয়, তিন ধাপে চাপতে হবে।
ডেভিড বাউকম

বিকল্পভাবে আপনি ESCc
টিপানোর

এই সমস্ত অপশন লাইনটিতে প্রথম অক্ষরের ধ্বংসাত্মক।
জোশিয়ায়

36

আমি আমার .vimrc ফাইলটিতে একটি সাধারণ সংযোজন নিয়ে এসেছি যা খুব ভালভাবে কাজ করে এবং সহজেই প্রসারিত হতে পারে। আপনি কেবল মন্তব্য_ম্যাপ এবং এর মন্তব্য নেতার সাথে একটি নতুন ফাইল টাইপ যুক্ত করুন।

আমি স্বাভাবিক এবং ভিজ্যুয়াল মোডগুলিতে একটি ম্যাপিং যুক্ত করেছি, তবে আপনি নিজের পছন্দ মতো কোনও কিছুতে পুনরায় তৈরি করতে পারেন। আমি কেবল 'টগল' শৈলীর কাজ করতে পছন্দ করি। একাধিক ম্যাপিং সহ একটি ভাল্লুক ইত্যাদি

let s:comment_map = { 
    \   "c": '\/\/',
    \   "cpp": '\/\/',
    \   "go": '\/\/',
    \   "java": '\/\/',
    \   "javascript": '\/\/',
    \   "lua": '--',
    \   "scala": '\/\/',
    \   "php": '\/\/',
    \   "python": '#',
    \   "ruby": '#',
    \   "rust": '\/\/',
    \   "sh": '#',
    \   "desktop": '#',
    \   "fstab": '#',
    \   "conf": '#',
    \   "profile": '#',
    \   "bashrc": '#',
    \   "bash_profile": '#',
    \   "mail": '>',
    \   "eml": '>',
    \   "bat": 'REM',
    \   "ahk": ';',
    \   "vim": '"',
    \   "tex": '%',
    \ }

function! ToggleComment()
    if has_key(s:comment_map, &filetype)
        let comment_leader = s:comment_map[&filetype]
        if getline('.') =~ "^\\s*" . comment_leader . " " 
            " Uncomment the line
            execute "silent s/^\\(\\s*\\)" . comment_leader . " /\\1/"
        else 
            if getline('.') =~ "^\\s*" . comment_leader
                " Uncomment the line
                execute "silent s/^\\(\\s*\\)" . comment_leader . "/\\1/"
            else
                " Comment the line
                execute "silent s/^\\(\\s*\\)/\\1" . comment_leader . " /"
            end
        end
    else
        echo "No comment leader found for filetype"
    end
endfunction


nnoremap <leader><Space> :call ToggleComment()<cr>
vnoremap <leader><Space> :call ToggleComment()<cr>

বিঃদ্রঃ:

আমি ফাইল টাইপ / লোডিংয়ে কোনও কলব্যাক বা হুক ব্যবহার করি না, কারণ আমি দেখতে পাচ্ছি যে তারা .vimrcস্থির ফাংশন / মানচিত্রের চেয়ে ভিমের প্রারম্ভকে ধীর করে দেয় তবে এটি কেবল আমার পছন্দ। আমি এটিকে সহজ এবং পারফরম্যান্ট রাখার চেষ্টা করেছি। আপনি যদি অটোম্যান্ডস ব্যবহার করেন তবে এগুলি একটি অটোকমন্ড গ্রুপে রাখার বিষয়ে আপনাকে নিশ্চিত হওয়া দরকার বা অন্যথায় কলব্যাকগুলি ফাইল-টাইপ লোড হওয়া ফাইল টাইপের একাধিকবার যুক্ত হবে এবং প্রচুর কর্মক্ষমতা হ্রাস পাবে।


1
আমি ভিমে সম্পূর্ণ নতুন, ম্যাপযুক্ত ফাংশন টগল করার জন্য কোন বোতামটি টিপতে হবে? <leader><Space>নীচে যে ঘোষণা কি ?
জেনস কোহল

2
আপনি <লিডার> <,> এর মতো একটি কী দিয়ে প্রতিস্থাপন করতে পারেন। তারপরে আপনি চাপ দিন, স্পেস করুন এবং এটি লাইনের মন্তব্যের স্থিতিতে টগল করবে। লিডার আপনার নেতা যাই হোক না কেন, ভিমের ডিফল্ট <লিডার> \ তবে আপনি নিজের মতো করে "লেট ম্যালেপডার = ','" সেট করতে পারেন

দুর্দান্ত উত্তর, যদিও একটি বিরক্তি, ইতিমধ্যে কিছু মন্তব্য রয়েছে এমন ব্লকগুলি মন্তব্য করা, অন-মন্তব্য করা লাইনের জন্য মন্তব্য অদলবদল করবে। উদাহরণস্বরূপ কিউটিক্রিটর সমস্ত মন্তব্য খালি লাইনগুলিতে নেতৃস্থানীয় মন্তব্য থাকলে কেবল মন্তব্যগুলি সরিয়ে দেয়, অন্যথায় একটি অগ্রণী মন্তব্য যুক্ত করুন।
ধারণাগুলি 42

1
আমি \zsএবং \zeরেজেক্স ট্রিকটি ব্যবহার করে কিছুটা আলাদা সংস্করণ তৈরি করেছি , কোডটি কিছুটা ছোট হয়ে গেল। আপনি এটি এখানে
সেরজিওআরাউজো

33

মন্তব্য টগল করুন

আপনার সমস্ত প্রয়োজন হলে মন্তব্য টগল করা উচিত আমি বরং কমেন্টারি দিয়ে যেতে পারি p টেম্পোপ দ্বারা ভিম

এখানে চিত্র বর্ণনা লিখুন

স্থাপন

প্যাথোজেন:

cd ~/.vim/bundle
git clone git://github.com/tpope/vim-commentary.git

vim-প্লাগ:

Plug 'tpope/vim-commentary'

Vundle:

Plugin 'tpope/vim-commentary'

আরও কাস্টমাইজেশন

এটি আপনার .vimrc ফাইলে যুক্ত করুন: noremap <leader>/ :Commentary<cr>

আপনি এখন সাব্লাইম এবং এটমের মতোই Leader+ টিপে মন্তব্যগুলি টগল করতে পারেন /


ধন্যবাদ! এটি কি ভবিষ্যতে কোনও সময় এইচটিএমএল-র ভিতরে সিএসএস মন্তব্য করা সমর্থন করবে?
ড্যান ওক

25

পাঠ্যের আয়তক্ষেত্রগুলি নির্বাচন করতে কন্ট্রোল-ভি ব্যবহার করুন: প্রথম #অক্ষরটিতে যান, টাইপ করুন Ctrl+ Vএকবার ডানদিকে সরান, এবং তারপরে নীচে, মন্তব্যগুলির শেষ পর্যন্ত। এখন টাইপ করুন x: আপনি #এক স্থান অনুসারে সমস্ত অক্ষর মুছছেন ।


18

এখানে আমার একটি বিভাগ .vimrc:

"insert and remove comments in visual and normal mode
vmap ,ic :s/^/#/g<CR>:let @/ = ""<CR>
map  ,ic :s/^/#/g<CR>:let @/ = ""<CR>
vmap ,rc :s/^#//g<CR>:let @/ = ""<CR>
map  ,rc :s/^#//g<CR>:let @/ = ""<CR>

স্বাভাবিক এবং ভিজ্যুয়াল মোডে, এটি আমাকে ,icমন্তব্য সন্নিবেশ ,rcকরতে এবং মন্তব্যগুলি সরাতে টিপতে দেয় ।


এটি কীভাবে নিজের লেখা শিখতে হয় তা একজন শিক্ষানবিশকে খুব সহায়ক .vimrc

3
mapসাধারণ এবং ভিজ্যুয়াল মোডগুলি কভার করে, সুতরাং আপনার vmapলাইনগুলির প্রয়োজন নেই
ডাবলডাউন

আরও ভাল জায়গা আছে after/ftplugin/ruby.vim
সন্তোষ কুমার

এছাড়াও ব্যবহার করুন <leader>icএবং<leader>rc
হান্স ক্রিশ্চিয়ান

15

আমি ভিএম 7.4 ব্যবহার করি এবং এটি আমার জন্য কাজ করে।
ধরে নিই আমরা 3 টি লাইন মন্তব্য / বিরক্তিহীন করছি।

মন্তব্য করতে:

লাইন শুরুতে কোন ট্যাব / স্থান হয়েছে থাকে:
ctrl + Vতারপর jjjতারপর shift + I (cappital i)তারপর //তারপর esc esc
যদি লাইনে ট্যাব / স্থান আছে আপনি এখনও শুরু উপরে বা জন্য swap 'র কি করতে পারেন c:
ctrl + Vতারপর jjjতারপর cতারপর //তারপর esc esc

uncomment করতে:

যদি লাইন শুরুতে কোন ট্যাব / স্থান
ctrl + Vতারপর jjjতারপর ll (lower cap L)তারপরc

যদি লাইন শুরুতে ট্যাব / স্থান, ওভার তারপর আপনি space এক এবং esc
ctrl + Vতারপর jjjতারপর ll (lower cap L)তারপর cতারপর spaceতারপরesc


9

আমি টিকমেন্ট প্লাগইনটি ব্যবহার করতে চাই: http://www.vim.org/scriptts/script.php?script_id=1173

আমি লাইন বা কোডের একটি হাইলাইটেড ব্লক মন্তব্য করার জন্য জিসি এবং জিসিসি ম্যাপ করেছি। এটি ফাইলের ধরন সনাক্ত করে এবং সত্যই ভাল কাজ করে।


9

আমার সামনে 30 টি উত্তর দিয়ে আমি আরও সহজ সমাধান দেওয়ার চেষ্টা করব: #লাইনের শুরুতে একটি In োকান। তারপরে একটি রেখায় গিয়ে ডট ( .) চাপুন । পুনরাবৃত্তি, না j, ., j, ., ইত্যাদি ... uncomment করতে, একটি অপসারণ #(আপনি মারতে পারেন xওভার #), এবং বিপরীত ব্যবহার করে তা করতে k, ., ইত্যাদি ...


1
এটি খুব সহজ উত্তর এমনকি শিক্ষানবিস বুঝতে এবং ব্যবহার করতে পারে। যাইহোক, মন্তব্য করার জন্য এটি প্রচুর পরিমাণে লাইনে বেশ ধীরে ধীরে কাজ করে। কাজটি করতে আপনি I#<Esc>jবাফারে লিখতে পারেন - বলুন c- এবং তারপরে করুন 10@cবা যে কোনও সংখ্যক লাইন আপনাকে উপযুক্ত করে।
দায়েরডেম্যান্ড

9

Vi তে নিম্নলিখিত তিনটি লাইনকে কীভাবে সংঘবদ্ধ করবেন:

#code code
#code
#code code code

উপরের বাম #চিহ্নের উপর কার্সারটি রাখুন এবং টিপুন CtrlV। এটি আপনাকে ভিজ্যুয়াল ব্লক মোডে রাখে। Jতিনটি লাইন নির্বাচন করতে নীচের তীর বা তিনবার টিপুন । তারপরে টিপুন D। সমস্ত মন্তব্য অদৃশ্য। পূর্বাবস্থায় ফেরাতে টিপুন U

Vi তে নিম্নলিখিত তিনটি লাইন কীভাবে মন্তব্য করবেন:

code code
code
code code code

উপরের বাম অক্ষরের উপর কার্সারটি রাখুন, টিপুন CtrlV। এটি আপনাকে ভিজ্যুয়াল ব্লক মোডে রাখে। তিনটি লাইন নির্বাচন করতে বা Jতিনবার টিপুন । তারপরে টিপুন:

I//Esc

এটি I, // এবং এস্কেপ এর মূলধন।

আপনি টিপলে ESC, নির্বাচিত সমস্ত লাইন আপনার নির্দিষ্ট করা মন্তব্য প্রতীক পাবেন।


1
যদি আপনি "উপরের বাম" হ্যাশ মিস্, আপনি টিপতে পারেন অর্ডার চাক্ষুষ মোডে "অন্য দিকে" এ কার্সার সরানোর হবে।
dylnmc

আমি মনে করি এটি ব্যবহার করা ভাল। কোনও তৃতীয় পক্ষের দরকার নেই, কেবল নেটিভ
ভিএম

সেরা উত্তর সহজ, এবং কোন তৃতীয় পক্ষের ছাড়া
Aze

8

হ্যাঁ, ইতিমধ্যে এই প্রশ্নের 33 টি (বেশিরভাগ পুনরাবৃত্তিমূলক) উত্তর রয়েছে।

এখানে তেজ মধ্যে লাইন মন্তব্য আউট কিভাবে আরেকটি পন্থা: গতি । মূল ধারণাটি হ'ল টাইপ করে yip2 টি লাইন টাইপ করে অথবা মুছে ফেলার মাধ্যমে অনুচ্ছেদে ইয়ঙ্ক করার মতো একই পদ্ধতিটি ব্যবহার করে মন্তব্য করা বা অসুবিধে করা লাইনগুলি আউট করা dj

এই পদ্ধতির সাহায্যে আপনি এ জাতীয় কাজ করতে পারবেন:

  • ccjপরবর্তী 2 লাইনটি মন্তব্য করার জন্য, এবং cukতাদেরকে অসুবিধে করার জন্য;

  • cci{একটি ব্লক আউট মন্তব্য, এবং cui{এটি uncomment করতে;

  • ccipএকটি সম্পূর্ণ অনুচ্ছেদে মন্তব্য করতে, এবং cuipএটি uncomment করতে।

  • ccGশেষ লাইনে cuggসমস্ত কিছু মন্তব্য করা, এবং প্রথম লাইনে সমস্ত কিছুকে অসন্তুষ্ট করা।

আপনার সমস্ত প্রয়োজন 2 টি ফাংশন যা গতিগুলির উপরে কাজ করে এবং প্রতিটি ফাংশনের জন্য 2 ম্যাপিং। প্রথমত, ম্যাপিংগুলি:

nnoremap <silent> cc  :set opfunc=CommentOut<cr>g@
vnoremap <silent> cc  :<c-u>call  CommentOut(visualmode(), 1)<cr>
nnoremap <silent> cu  :set opfunc=Uncomment<cr>g@
vnoremap <silent> cu  :<c-u>call  Uncomment(visualmode(), 1)<cr>

( g@অপারেটর এবং operatorfuncচলক সম্পর্কে ম্যানুয়াল দেখুন See )

এবং এখন ফাংশন:

function! CommentOut(type, ...)
  if a:0
    silent exe "normal!  :'<,'>s/^/#/\<cr>`<"
  else
    silent exe "normal!  :'[,']s/^/#/\<cr>'["
  endif
endfunction

function! Uncomment(type, ...)
  if a:0
    silent exe "normal!  :'<,'>s/^\\(\\s*\\)#/\\1/\<cr>`<"
  else
    silent exe "normal!  :'[,']s/^\\(\\s*\\)#/\\1/\<cr>`["
  endif
endfunction

কোথায় হওয়া #উচিত তা আপনার স্বাদ অনুসারে নিয়মিত প্রকাশগুলি উপরে পরিবর্তন করুন :


"সম্পূর্ণ নতুন [...] গতি" শীর্ষ থেকে কিছুটা বেশি মনে হচ্ছে: টি_কমেন্ট এবং ভিআইএম-মন্তব্য প্লাগইনগুলি উভয়ই এই উত্তরটির পূর্বসূরি, আপনাকে গতি ব্যবহার করে মন্তব্য করার সুযোগ দেয়।
ধনী

ভাল জিনিস! সম্মত। (আমি আরও মনে করি যে আমি পূর্বে যে প্লাগইনটি ব্যবহার করছিলাম তার পরিবর্তে আমি এই পদ্ধতির ব্যবহার শুরু করতে পারি, সুতরাং এটি লেখার জন্য ধন্যবাদ!)
ধনী

7

আপনি যদি ইতিমধ্যে লাইন নম্বরগুলি জানেন, তবে n,ms/# //কাজ করবে।


সত্যিই এটি সম্ভবত হওয়া উচিত: এন, এমএস / ^ \ এস। # // কারণ আপনার সাদা স্থানের শীর্ষস্থান থাকতে পারে এবং হ্যাশটিকে একটি দিয়ে অনুসরণ নাও করতে পারে
হফম্যান

7

আমি প্রথম এবং শেষ লাইনগুলি চিহ্নিত করেছি (মা এবং এমবি), এবং তারপরে: 'এ,' বিএস / ^ # //


6

আমি বর্ধিত কমেন্টিফাই ব্যবহার করি । এটি আমার প্রয়োজনীয় সমস্ত কিছুর (প্রোগ্রামিং ভাষা, স্ক্রিপ্ট, কনফিগারেশন ফাইল) মন্তব্য করে। আমি ভিজ্যুয়াল-মোড বাইন্ডিং সহ এটি ব্যবহার করি। আপনি মন্তব্য করতে চান এমন পাঠ্য কেবল নির্বাচন করুন এবং সহ / সিসি / সিডি টিপুন।

vmap co :call EnhancedCommentify('','guess')<CR>
vmap cc :call EnhancedCommentify('','comment')<CR>
vmap cd :call EnhancedCommentify('','decomment')<CR> 

5

আমি ফিল এবং জ্যাকনোর উত্তরকে একত্রিত করেছি এবং ফাঁকা জায়গাগুলির সাথে অবিচলিত মন্তব্য করেছি:

autocmd FileType c,cpp,java,scala let b:comment_leader = '//'
autocmd FileType sh,ruby,python   let b:comment_leader = '#'
autocmd FileType conf,fstab       let b:comment_leader = '#'
autocmd FileType tex              let b:comment_leader = '%'
autocmd FileType mail             let b:comment_leader = '>'
autocmd FileType vim              let b:comment_leader = '"'
function! CommentToggle()
    execute ':silent! s/\([^ ]\)/' . b:comment_leader . ' \1/'
    execute ':silent! s/^\( *\)' . b:comment_leader . ' \?' . b:comment_leader . ' \?/\1/'
endfunction
map <F7> :call CommentToggle()<CR>

5

tpopeবলা হয় এই জীবন পরিবর্তন প্লাগইন আছেvim-commentary

https://github.com/tpope/vim-commentary

এই প্লাগইন সরবরাহ করে :

  • সদ্বিবেচনা
  • সঠিকভাবে অভিযুক্ত মন্তব্য
  • খালি / অপ্রয়োজনীয় লাইনগুলি মন্তব্য করে না

ব্যবহার :

  • ভন্ডল (অথবা আমার অনুমানকারী প্যাথোজেন) এর মাধ্যমে ইনস্টল করুন।
  • আপনার পাঠ্যটি হাইলাইট করুন এবং টিপুন :যা হিসাবে প্রদর্শিত হবে:<,'>
  • কমেন্টারি এখানে টাইপ করুন :<,'>Commentaryএবং টিপুন Enter
  • গম্ভীর গর্জন। তোর কুঁড়ি

vim-commentary(টিপোপের প্লাগইনগুলির মতো) আইডেমিমেটিক ভিমে থাকার বোনাস রয়েছে। gc= "মন্তব্য করুন", gcap= "একটি অনুচ্ছেদে মন্তব্য করুন" ইত্যাদি
সোনাররাটিও

এটি কি জিম স্টুয়ার্টের টিম পোপের উত্তরের একটি সম্পাদনা হতে পারে?
jdk1.0

5

এই উত্তরটি সবচেয়ে কার্যকর যদি আপনি প্লাগইন ইনস্টল করতে অক্ষম হন তবে আপনি এখনও আপনার মন্তব্য অক্ষরগুলি বিদ্যমান ইনডেন্টেশন স্তরগুলি অনুসরণ করতে চান।

এই উত্তরটি একটি পেস্ট সঠিক কোড প্রদর্শিত 1 করার জন্য এখানে) হল .vimrcপেতে vim 7.4+মন্তব্য / যখন চাক্ষুষ মোডে 1 শর্টকাট এবং 2) সঙ্গে খাঁজের স্তর পালন এটা ব্যাখ্যা করার uncommenting ব্লক না। কোডটি এখানে:

let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.[ch]    let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.cpp    let b:commentChar='//'
autocmd BufNewFile,BufReadPost *.py    let b:commentChar='#'
autocmd BufNewFile,BufReadPost *.*sh    let b:commentChar='#'
function! Docomment ()
  "make comments on all the lines we've grabbed
  execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e'
endfunction
function! Uncomment ()
  "uncomment on all our lines
  execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e'
endfunction
function! Comment ()
  "does the first line begin with a comment?
  let l:line=getpos("'<")[1]
  "if there's a match
  if match(getline(l:line), '^\s*'.b:commentChar)>-1
    call Uncomment()
  else
    call Docomment()
  endif
endfunction
vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>

কিভাবে এটা কাজ করে:

  • let b:commentChar='//': এটি ভিমে একটি পরিবর্তনশীল তৈরি করে। bএখানে সুযোগ, যা এই ক্ষেত্রে বাফার অন্তর্ভুক্ত করা হয়, বর্তমানে খোলা ফাইল অর্থ বোঝায়। আপনার মন্তব্যের অক্ষরগুলি স্ট্রিং এবং কোটগুলিতে মোড়ানো দরকার, টোটাল টগল করার সময় কোটগুলি কী পরিমাণে প্রতিস্থাপন করা হবে তার অংশ নয়।

  • autocmd BufNewFile,BufReadPost *...: স্বতঃশব্দগুলি বিভিন্ন জিনিসে ট্রিগার করে, এক্ষেত্রে নতুন ফাইল বা পঠন ফাইলটি নির্দিষ্ট এক্সটেনশনের সাথে শেষ হলে এগুলি ট্রিগার হয়। একবার ট্রিগার হয়ে গেলে, নিম্নলিখিত কমান্ডটি কার্যকর করুন, যা আমাদের commentCharফাইল টাইপের উপর নির্ভর করে পরিবর্তন করতে দেয় । এটি করার অন্যান্য উপায় রয়েছে তবে তারা নবীনদের (আমার মতো) আরও বিভ্রান্তিকর।

  • function! Docomment(): ফাংশনগুলি শুরু করে functionএবং শেষ করে ঘোষণা করা হয় endfunction। কার্যাদি একটি মূলধন দিয়ে শুরু করা উচিত। !নিশ্চিত করে যে এই ফাংশন পূর্ববর্তী কোনো ফাংশন হিসাবে সংজ্ঞায়িত মুছে ফেলা হয় Docomment()এর এই সংস্করণের সাথে Docomment()। ছাড়া !, আমার ত্রুটি ছিল, তবে এটি সম্ভবত কারণ আমি ভিএম কমান্ড লাইনের মাধ্যমে নতুন ফাংশনগুলি সংজ্ঞায়িত করছি।

  • execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e': এক্সিকিউট একটি কমান্ড কল। এই ক্ষেত্রে, আমরা নির্বাহ করছি substitute, যা %পুরো বাফার বা '<,'>হাইলাইটেড বিভাগের জন্য (পূর্বনির্ধারিতভাবে এটি বর্তমান লাইনটি) একটি পরিসর নিতে পারে । ^\s*রেগেক্সটি কোনও লাইন শুরুর সাথে মিলে যায় তারপরে যেকোন পরিমাণ শ্বেতস্পেস থাকে, যার পরে যুক্ত হয় (কারণে &)। .এখানে স্ট্রিং সংযুক্তকরণের জন্য ব্যবহৃত যেহেতু হয় escape()করতে পারেন কোট আবৃত না। escape()এর সাথে আপনাকে প্রিন্ট করে commentCharআর্গুমেন্টগুলি (এই ক্ষেত্রে \এবং /) এর সাথে মিল রেখে চরিত্রের হাত থেকে বাঁচতে দেয় \। এর পরে, আমরা আমাদের সমাপ্তির সাথে আবার সম্মতি জানাইsubstitute স্ট্রিংয়ের , যা রয়েছেeপতাকা। এই পতাকাটি আমাদের নিঃশব্দে ব্যর্থ হতে দেয়, এর অর্থ হ'ল যদি আমরা একটি প্রদত্ত লাইনে কোনও মিল খুঁজে না পাই তবে আমরা এটির জন্য চিৎকার করব না। সামগ্রিকভাবে, এই লাইনটি প্রথম পাঠ্যের ঠিক আগে একটি স্থানের পরে একটি মন্তব্য চরিত্র রাখতে দেয় যার অর্থ আমরা আমাদের ইনডেন্টেশন স্তরটি রেখেছি।

  • execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e': এটি আমাদের শেষ বিশাল দীর্ঘ কমান্ডের অনুরূপ। এটির সাথে অনন্য, আমাদের রয়েছে \vযা নিশ্চিত করে যে আমাদের পালাতে হবে না ()এবং 1যা আমাদের সাথে তৈরি গ্রুপকে বোঝায় ()। মূলত, আমরা এমন একটি লাইনের সাথে মিলছি যা কোনও পরিমাণ শ্বেতস্পেসের সাথে শুরু হয় এবং তারপরে আমাদের মন্তব্য চরিত্রের পরে কোনও পরিমাণ শ্বেতস্পেস থাকে এবং আমরা কেবল সাদা স্থানটির প্রথম সেট রাখছি keeping আবার, eআমাদের যদি সেই লাইনে কোনও মন্তব্য চরিত্র না থাকে তবে আমাদের নিঃশব্দে ব্যর্থ হতে দিন।

  • let l:line=getpos("'<")[1]: এটি আমাদের মতামত চরিত্রের মতো অনেকটা পরিবর্তনশীল সেট lকরে তবে স্থানীয় সুযোগকে বোঝায় (এই ফাংশনের স্থানীয়)। getpos()এক্ষেত্রে আমাদের হাইলাইটিংয়ের শুরুতে এবং এর [1]অর্থ কীভাবে আমরা কেবল লাইন নম্বর সম্পর্কে যত্নশীল, কলামের সংখ্যার মতো অন্যান্য জিনিস নয়।

  • if match(getline(l:line), '^\s*'.b:commentChar)>-1: আপনি জানেন কিভাবে ifকাজ করে। match()প্রথম জিনিসটিতে দ্বিতীয় জিনিস রয়েছে কিনা তা যাচাই করে, সুতরাং আমরা যে লাইনটি আমাদের হাইলাইটিং শুরু করেছি তা ধরলাম এবং এটি আমাদের মন্তব্য চরিত্রের পরে হোয়াইটস্পেস দিয়ে শুরু হয় কিনা তা পরীক্ষা করে দেখুন। match()সূচিটি যেখানে এটি সত্য, এবং -1যদি কোনও মিল খুঁজে পাওয়া যায় নি returns যেহেতু ifসমস্ত ননজারো সংখ্যাকে সত্য বলে মূল্যায়ন করা হয়, তাই আমাদের আউটপুটটি -1 এর চেয়ে বড় কিনা তা দেখতে আমাদের তুলনা করতে হবে। vimরিটার্নের তুলনায় 0 টি মিথ্যা এবং 1 টি যদি সত্য হয়, যা ifসঠিকভাবে মূল্যায়ন করতে দেখতে চায়।

  • vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>: এর vnoremapঅর্থ নীচের কমান্ডটি ভিজ্যুয়াল মোডে মানচিত্র করুন, তবে এটিকে পুনরাবৃত্তভাবে মানচিত্র করবেন না (অর্থাত্ কোনও উপায় যা অন্য উপায়ে ব্যবহার করতে পারে তা পরিবর্তন করবেন না)। মূলত, আপনি যদি কোনও ভিম ​​আভিজাত্য হন তবে সর্বদা noremapআপনার জিনিসগুলি ভঙ্গ করবেন না তা নিশ্চিত করার জন্য ব্যবহার করুন । <silent>এর অর্থ "আমি আপনার শব্দগুলি, কেবল আপনার ক্রিয়াকলাপ" চাই না এবং কমান্ড লাইনে কোনও কিছু না প্রিন্ট করতে বলি। <C-r>এই জিনিসটিতে আমরা ম্যাপিং করছি, এটিই সিটিটিআল + আর (নোট করুন যে আপনি এখনও এই ম্যাপিংয়ের সাথে সাধারণ মোডে "পুনরায়" ব্যবহার করতে সিআর সাধারণভাবে ব্যবহার করতে পারেন)। C-uবিভ্রান্তিকর, তবে মূলত এটি নিশ্চিত করে যে আপনি আপনার ভিজ্যুয়াল হাইলাইটিংয়ের ট্র্যাকটি হারাবেন না ( এই উত্তর অনুসারে এটি আপনার কমান্ডটি এখানেই শুরু করবে কেবল আমাদের নামক ফাংশনটি সম্পাদন করতে ভিমকে বলে, এবং'<,'> যা আমরা যা চাই তা )।call<cr>enterবোতাম টিপুন বোঝায় । আমাদের ফাংশনটি কল করতে একবার এটি আঘাত করতে হবে (অন্যথায় আমরা কেবল call function()কমান্ড লাইনে টাইপ করেছি , এবং আমাদের বিকল্পগুলি সমস্ত পথ দিয়ে যেতে পেতে আমাদের এটি আবার আঘাত করতে হবে (কেন তা নিশ্চিত নয় তবে কেন যাই হোক না কেন))।

যাইহোক, আশা করি এটি সাহায্য করবে। এই দিয়ে হাইলাইট কিছু লাগবে v, Vঅথবা C-v, চেক যদি প্রথম লাইন মন্তব্য করা হয়, হ্যাঁ হলে, সব হাইলাইট লাইন uncomment চেষ্টা করে, এবং যদি না, প্রতিটি লাইনে মন্তব্য অক্ষরের একটি অতিরিক্ত স্তর যোগ করুন। এটি আমার কাঙ্ক্ষিত আচরণ; আমি চাইনি যে এটি ব্লগের প্রতিটি লাইন মন্তব্য করা হয়েছে কিনা তা টগল করতে চাই না, তাই বিষয়টিতে একাধিক প্রশ্ন জিজ্ঞাসা করার পরে এটি আমার পক্ষে নিখুঁতভাবে কাজ করে।



3

আপনি টিপোপ দ্বারা ভিম-মন্তব্যটি ব্যবহার করতে পারেন ( https://github.com/tpope/vim-commentary ) আপনি এটি নিম্নলিখিত হিসাবে ব্যবহার করতে পারেন:

টিপে ভিজ্যুয়াল মোড প্রবেশ করান

'v'

তারপরে টিপুন

'j' repeatedly or e.g 4j to select 4 row

নির্বাচনের সাথে আপনাকে যা করতে হবে তা হ'ল কীগুলি প্রবেশ করান:

'gc'

এটি সমস্ত নির্বাচনের বিষয়ে মন্তব্য করবে যাতে আপত্তিহীন পুনরাবৃত্তি কীগুলি করতে:

'gc'

3

এখানে একটি মৌলিক এক-লাইনের উপর ভিত্তি করে C-vদ্বারা অনুসরণ Iউপরে বর্ণিত পদ্ধতি।

এই আদেশটি ( :Comment) কোনও নির্বাচিত লাইনের শুরুতে একটি নির্বাচিত স্ট্রিং যুক্ত করে।

command! -range -nargs=1 Comment :execute "'<,'>normal! <C-v>0I" . <f-args> . "<Esc><Esc>"

.vimrcএকটি কমান্ড তৈরি করতে আপনার এই লাইনটি যুক্ত করুন যা একটি একক আর্গুমেন্ট গ্রহণ করে এবং বর্তমান নির্বাচনের প্রতিটি লাইনের শুরুতে যুক্তিটি রাখে।

যেমন নীচের পাঠ্যটি নির্বাচিত হলে:

1
2

এবং আপনি এটি চালান:, :Comment //ফলাফলটি হবে:

//1
//2

3

এখানে উত্তরগুলিতে ধারণাগুলি দিয়ে শুরু করে আমি আমার নিজস্ব মন্তব্য ফাংশন শুরু করেছি। এটি মন্তব্যগুলিকে চালু এবং বন্ধ করে দেয়। এটি এর মতো জিনিসগুলি পরিচালনা করতে পারে //print('blue'); //this thing is blueএবং প্রথম মন্তব্যটি টগল করে। তবুও এটি মন্তব্য এবং একটি একক স্থান যুক্ত করে যেখানে প্রথম অদ্বিতীয় স্থানটি লাইনের একেবারে শুরুতে নয়। সাধারণভাবে এটি অপ্রয়োজনীয়ভাবে শ্বেত স্পেসগুলি অনুলিপি করে না, তবে মন্তব্য এবং ইন্ডেন্টেড লাইনের সময় অতিরিক্ত কাজটি এড়াতে জুমগুলি (: h \ zs) ব্যবহার করে। আশা করি এটি সেখানে কিছু সংখ্যালঘুদের সাহায্য করবে। পরামর্শ স্বাগত জানাই।

" these lines are needed for ToggleComment()
autocmd FileType c,cpp,java      let b:comment_leader = '//'
autocmd FileType arduino         let b:comment_leader = '//'
autocmd FileType sh,ruby,python  let b:comment_leader = '#'
autocmd FileType zsh             let b:comment_leader = '#'
autocmd FileType conf,fstab      let b:comment_leader = '#'
autocmd FileType matlab,tex      let b:comment_leader = '%'
autocmd FileType vim             let b:comment_leader = '"'

" l:pos   --> cursor position
" l:space --> how many spaces we will use b:comment_leader + ' '

function! ToggleComment()
    if exists('b:comment_leader')
        let l:pos = col('.')
        let l:space = ( &ft =~ '\v(c|cpp|java|arduino)' ? '3' : '2' )
        if getline('.') =~ '\v(\s*|\t*)' .b:comment_leader
            let l:space -= ( getline('.') =~ '\v.*\zs' . b:comment_leader . '(\s+|\t+)@!' ?  1 : 0 )
            execute 'silent s,\v^(\s*|\t*)\zs' .b:comment_leader.'[ ]?,,g'
            let l:pos -= l:space
        else
            exec 'normal! 0i' .b:comment_leader .' '
            let l:pos += l:space
        endif
        call cursor(line("."), l:pos)
    else
        echo 'no comment leader found for filetype'
    end
endfunction

nnoremap <Leader>t :call ToggleComment()<CR>
inoremap <Leader>t <C-o>:call ToggleComment()<CR>
xnoremap <Leader>t :'<,'>call ToggleComment()<CR>

1
আমি আপনার সমাধানটির কিছুটা আলাদা সংস্করণ তৈরি করেছি যা কার্সারের অবস্থান পুনরুদ্ধার করে, আমি সে সম্পর্কে আপনার মতামত চাই। GitHub উপর
SergioAraujo

কুল। আপনি আমার পোস্টটি সম্পাদনা করতে পারেন এবং আপনার সমাধান যুক্ত করতে পারেন (মিলের কারণে)!
মাইক

সি, সিপিপি, জাভা ব্যাকস্ল্যাশিং এড়াতে এবং E488 এড়াতে বিকল্পগুলিতে অন্য বিভাজক ব্যবহার করে এটি পরিবর্তিত হয়েছে। জাভা, সিপিসি জন্য ব্যবধানের পরিবর্তন হয় কারণ মন্তব্যগুলির তিনটি অক্ষর, // প্লাস স্পেস থাকে, এটি l: স্পেস দ্বারা সম্পন্ন হয়।
সেরজিওআরাউজো

3

আমি মন্তব্যগুলি ব্যবহার করি Jas জস্মিত সিংহ আনন্দ (ভিম.অর্গ.এ পাওয়া যায়) থেকে,

এটি সি, সি ++, জাভা, পিএইচপি [২৩45৪], প্রোক, সিএসএস, এইচটিএমএল, এইচটিএম, এক্সএমএল, এক্সএইচটিএমএল, ভিআইএম, ভিএমআরসি, এসকিউএল, এসএইচ, কেএস, সিএস, পার্ল, টেক্সট, ফোরট্রান, মিলি, ক্যামেল, অকামল, ভিএইচডিএল, হাস্কেল এবং সাধারণ ফাইল

এটি স্বাভাবিক এবং ভিজ্যুয়াল উভয় মোডে বিভিন্ন উত্স ফাইলগুলিতে মন্তব্য এবং আন-মন্তব্য লাইনগুলি

ব্যবহার:

  • CtrlCএকটি এক লাইনে মন্তব্য করতে
  • CtrlXথেকে আন-মন্তব্য একটি একক লাইন
  • ShiftVএবং একাধিক লাইন নির্বাচন করুন, তারপরে CtrlCনির্বাচিত একাধিক লাইনের মন্তব্য করতে
  • ShiftVএবং একাধিক লাইন নির্বাচন করুন, তারপরে CtrlXনির্বাচিত একাধিক লাইন আন-মন্তব্য করতে

3

সেগুলির দ্রুত এবং অতি স্বজ্ঞাত পদ্ধতি হ'ল )লাইনের ওয়াক-ডাউন-মন্তব্যের জন্য পুনরায় তৈরি করা এবং তারপরে( ওয়াক-আপ-অ-সংঘাতের জন্য। চেষ্টা করে দেখুন আর ফিরে যাবেন না।

ইন রুবি বা ব্যাশ , 2-স্থান ইনডেন্ট সঙ্গে

map ) I# <Esc>j
map ( k^2x

ইন সি / সি ++ বা পিএইচপি , 4-স্পেস ইনডেন্ট সঙ্গে

map ) I//  <Esc>j
map ( k^4x

ডাউনসাইডগুলি হ'ল আপনি হেরে গেছেন (এবং )বাক্য-চলাফেরার জন্য (তবে dasসেখানে পূরণ করতে পারেন) এবং আপনি মাঝে মাঝে নির্বাচন-প্রতিস্থাপন বা পিছনে পড়ে যাবেন বাCtrlV দীর্ঘ বিভাগগুলি পরিচালনা করার জন্য পিছিয়ে পড়বেন। তবে এটি বেশ বিরল।

এবং সি-স্টাইলের জন্য, দীর্ঘ মন্তব্যগুলি সর্বোত্তমভাবে পরিচালনা করা হয়:

set cindent
set formatoptions=tcqr

... যা V[move]gqশব্দ-মোড়ানো পুনরায় করতে আবার ব্যবহারের সাথে ভালভাবে একত্রিত ।


2

এই সরল স্নিপেটটি আমার .vimrc থেকে এসেছে:

function! CommentToggle()
    execute ':silent! s/\([^ ]\)/\/\/ \1/'
    execute ':silent! s/^\( *\)\/\/ \/\/ /\1/'
endfunction

map <F7> :call CommentToggle()<CR>

এটি // - মন্তব্যগুলির জন্য, তবে আপনি অন্যান্য অক্ষরের জন্য এটি সহজেই মানিয়ে নিতে পারেন। আপনি jqno এর পরামর্শ অনুসারে একটি নেতা সেট করতে অটোকিমডি ব্যবহার করতে পারেন।

রেঞ্জ এবং ভিজ্যুয়াল মোডের সাথে প্রাকৃতিকভাবে কাজ করা এটি একটি খুব সহজ এবং দক্ষ উপায়।


2

আমি /* ... */(সি আনসির মন্তব্যগুলি) পছন্দ করি, সুতরাং এটি আপনার জন্য আমার কৌশল। আপনি অবশ্যই এটি বিভিন্ন ক্ষেত্রে ব্যবহার করতে অভিযোজিত করতে পারেন।


/ * ... * / এর সাথে মন্তব্য করুন

পাঠ্যটি নির্বাচন করুন (শুরুতে যান, ভিজ্যুয়াল ব্লক শুরু করুন, সাথে লাফ দিন }):

<c-V>}

নির্বাচনের ক্ষেত্রে প্রয়োগ করতে কমান্ডটি টাইপ করুন

:norm i/* <c-v><esc>$a */

কমান্ডটি দেখতে পাবেন: :'<,'>norm i /* ^[$a */

বিশদ জন্য দেখুন (আমি *)।


মন্তব্য * / * ... * /

পাঠ্যটি নির্বাচন করুন (আগের মতো বা অন্যভাবে আপনার পছন্দ মতো):

<c-V>}

নির্বাচনের ক্ষেত্রে প্রয়োগ করতে কমান্ডটি টাইপ করুন

:norm :s-\s*/\*\s*-<c-v><enter>$bbld$

কমান্ডটি দেখতে পাবেন: :'<,'>norm :s-\s*/\*\s*-^M$bbld$

বিস্তারিত জানতে (ii *) দেখুন।


ফলাফল

প্রতিক্রিয়া মন্তব্য দ্বারা লাইন লাইন:

Comment block
Comment block
Comment block

হয়ে ওঠে (এবং তদ্বিপরীত):

/* Comment block */
/* Comment block */
/* Comment block */

এটি কিছু হিসাবে mapবা @regআপনার হিসাবে এটি সংরক্ষণ করা ভাল .vimrc, কারণ এটি টাইপ করার মতো অনেক কিছুই। আপনি যদি একটি একক /*এবং */পুরো ব্লকে পছন্দ করেন তবে ব্যবহার করুন:

একক / * * / পুরো ব্লক দিয়ে মন্তব্য করুন

qcএকটি অনুচ্ছেদের শুরুতে মন্তব্য করার সাথে , এরপরে রেকর্ডিং করে একটি রেজিস্টারে এটি সংরক্ষণ করুন:

v}di/*  */<esc>hhhp

এবং qরেকর্ড শেষ করতে, আবার ভুলবেন না ।

বিশদ জানতে (iii *) দেখুন।


একটি ব্লক থেকে একক / * * / মন্তব্য করুন

এটি রেজিস্টারে সংরক্ষণ করুন, বলুন @u। আপনার কার্সারটিকে ব্লকের ভিতরে যে কোনও জায়গায় রাখুন এবং:

?/\*<enter>xx/\*/<enter>xx

শেষ করে রেজিস্টারটি সংরক্ষণ করুন qকমান্ড ।

বিশদ জানতে (iv *) দেখুন।


ফলাফল

প্রভাব একাধিক লাইনের জন্য একক মন্তব্য:

Comment block
Comment block
Comment block

হয়ে ওঠে (এবং তদ্বিপরীত):

/* Comment block
Comment block
Comment block */

ব্যাখ্যা

(i *) এটি normপ্রতিটি নির্বাচিত লাইনে বারবার একই কমান্ড প্রয়োগ করে এটি ব্যবহার করে কাজ করে । কমান্ডটি কেবল একটি সন্নিবেশ /*করায়, সেই রেখার শেষটি খুঁজে এবং a সন্নিবেশ করে শেষ হয়*/

:norm i/* <c-v><esc>$a */

(ii *) এটি normপ্রতিটি লাইনে অনুসন্ধান পুনরায় / প্রতিস্থাপন করতেও ব্যবহার করে। অনুসন্ধান করুন spaces /* spacesএবং কিছুই দ্বারা প্রতিস্থাপন। এর পরে, রেখার শেষটি খুঁজে দুটি শব্দ ফিরে, ডানদিকের একটি চিঠি, শেষে মুছুন।

:norm :s-\s*/\*\s*-<c-v><enter>$bbld$

(iii *) দ্বারা অনুচ্ছেদ নির্বাচন করে v}এটি মুছুন, একটি মন্তব্য খোলা এবং বন্ধ সন্নিবেশ করুন, এর মাঝখানে যান এবং মুছে ফেলা ব্লকটি পেস্ট করুন।

v}di/*  */<esc>hhhp

(iv *) মাঝখানে যে কোনও জায়গায়, পিছনের দিকে সন্ধান করে /*, এটি মুছে ফেলে; এগিয়ে একটি খুঁজে */, এটি মুছে ফেলা।

?/\*<enter>xx/\*/<enter>xx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.