কেন আমি অগ্রুপ ব্যবহার করব?


31

আমি বুঝতে পারি যে অটো কমান্ডগুলি কীভাবে কাজ করে এবং কীভাবে সেগুলি ব্যবহার করা যায়, তবে আমি কীভাবে অগ্রগতি অর্জন করব তা সম্পর্কে কিছুটা নিশ্চিত। আমি পড়েছি:help augroup

                                                    *:aug* *:augroup*
:aug[roup] {name}               Define the autocmd group name for the
                                following ":autocmd" commands.  The name "end"
                                or "END" selects the default group.
                                To avoid confusion, the name should be
                                different from existing {event} names, as this
                                most likely will not do what you intended.

এগুলি সত্যই ব্যাখ্যা করে না যে তারা কেন কার্যকর, বা আমি কেন একে অপরের পাশে কেবলমাত্র একটি গুচ্ছ সংজ্ঞা সংজ্ঞায়িত করে একটি স্বতঃসম্পর্ক গোষ্ঠীর নাম বানাতে চাই।

উদাহরণস্বরূপ, যদি স্বতঃসম্পর্ক fooএবং barসম্পর্কিত হয় তবে আমি কেন করতে চাই

augroup spam
  au!
  au foo * foo
  au bar * bar
augroup END

যখন আমি ঠিক করতে পারি

"Autocommands for spam
au foo * foo
au bar * bar

অগ্রুপগুলি কীসের জন্য আসলে আমি তা ভুল বুঝেছি না। তাহলে কেন তারা দরকারী?

উত্তর:


30

augroupগুলি ব্যবহারের মূল কারণ হ'ল স্বতঃবাগলসমূহের বিস্তৃতিতে বৃহত্তর নিয়ন্ত্রণের অনুমতি দেওয়া, যেমন একসাথে একগুচ্ছ অটোোক্যান্ডগুলি মুছে ফেলা। একটি সাধারণ প্যাটার্ন হ'ল au!একটি গ্রুপের প্রথম অংশ হিসাবে ব্যবহার করা । এটি গ্রুপে বিদ্যমান সমস্ত অটোম্যান্ডগুলি সরিয়ে দেয় এবং একজনকে নতুন করে শুরু করার অনুমতি দেয়। আপনি যদি কোনও গোষ্ঠী ব্যবহার না করেন, তবে au!আপনি যে সমস্ত / অনেকগুলি স্ব-কমান্ড অপসারণ করতে চান না তা সরিয়ে ফেলবেন।

প্লাগইনগুলিতে উদাহরণস্বরূপ, অটোকম্যান্ডগুলি মুছে ফেলা আসলে বেশ সাধারণ, কারণ এটি একাধিকবার প্লাগইন / ftplugin উত্সের অনুমতি দেয়। আপনি যদি স্বতঃসম্পাদনা মুছে না থাকেন তবে প্রতিবার আপনি যখন প্লাগইন / এফটি প্লাগইন উত্সাহিত করেছেন তখন একই অটোম্যান্ডের একটি নতুন অনুলিপি যুক্ত করবেন। এটি আপনার vimrcফাইলের ক্ষেত্রেও সত্য । আপনার ভিএমআরসি ফাইলে একটি গ্রুপ ব্যবহার করে এটি পুনরায় লোড করা নিরাপদ হয়ে যায় becomes

আরও তথ্যের জন্য, দেখুন :h 40.3


19

অটোকমন্ড গোষ্ঠীগুলি আপনাকে আপনার অটোম্যান্ডগুলি সংগঠিত করার সুযোগ দেয় যা এটি নিজেই এবং বেশ কার্যকর বৈশিষ্ট্য।

বলুন আপনি একটি প্লাগইন লিখছেন। আপনার নিজের নামের জায়গার অধীনে আপনার প্লাগইনটির স্বতঃশব্দগুলিকে গোষ্ঠীভূত করা অর্থবোধ করে, কেবলমাত্র যদি এটি আপনাকে ইচ্ছামত আপনার অটোম্যান্ডগুলি সক্ষম / অক্ষম করতে দেয়।

আপনার vimrcমৌলিকভাবে plugin/foo.vimএটির চেয়ে আলাদা নয় , আপনি স্বতঃসংশ্লিষ্ট গোষ্ঠীগুলির সাথে যা পান তা মূলত আপনার সেটআপের উপর আরও নিয়ন্ত্রণ।

প্রস্তুতিতে…

আপনি যদি এগুলিকে কোনও গোষ্ঠীতে অর্পণ না করেন তবে ডিফল্টরূপে গ্লোবাল গ্রুপে স্বতঃসমানিকগুলি "ইনস্টলড" থাকে। তাদের নিজস্ব গোষ্ঠীতে সম্পর্কিত অটোম্যান্ডগুলি ইনস্টল করা কেবল বিষয়গুলিকে আরও পরিষ্কার করে না তবে এটি আপনাকে খুব সহজে এবং একক দ্বারা ভয়ঙ্কর "পাইল-আপ" প্রভাব প্রতিরোধ করতে দেয় !:

augroup spam             versus    autocmd! Foo * foo
    autocmd!                       autocmd! Bar * bar
    autocmd Foo * foo
    autocmd Bar * bar
augroup END

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

ডানদিকে, ভিম প্রতিটি অটোকম্যান্ডের জন্য একই "আনইনস্টল / ইনস্টল" রুটিনের মাধ্যমে অপব্যয়ীভাবে চলবে। ডার্টি।

আপনি না চাইলে আপনাকে প্রতিবার পুরো ব্লকটি লিখতে হবে না। স্বতঃসংশ্লিষ্টদের সরাসরি একটি গোষ্ঠীতে বরাদ্দ করা যায় যাতে আপনি কোথাও একটি গ্রুপ নির্ধারণ করতে পারেন:

augroup spam
    autocmd!
augroup END

এবং আপনি যেখানে চান সেখানে নিজের অটোম্যাঙ্কগুলি রাখুন, এমনকি অন্য স্ক্রিপ্টে:

autocmd spam Foo * foo
autocmd spam Bar * bar

এটি আপনাকে দেবে:

  • namespacing
  • গাদা আপ প্রতিরোধ
  • ক্রম
  • নমনীয়তা

15

অন্যান্য উত্তরগুলি বাদ দিয়ে আমি দেখতে পেলাম যে সর্বাধিক তাত্ক্ষণিক ব্যবহারিক সুবিধা হ'ল এটি ভিমস্ক্রিপ্ট ফাইলগুলি পুনরায় লোড করা সহজ করে।

উদাহরণস্বরূপ এটি আপনার ভিএমআরসিতে আটকে দিন:

autocmd BufCreate * echom "New buffer!"

প্রস্থান করুন, পুনরায় চালু করুন, একটি নতুন বাফার তৈরি করুন। আপনি New buffer!যা দেখতে পারেন তা যাচাই করে নিতে পারেন :messages

এখন আপনার ভিএমআরসি: পুনরায় লোড করুন :source $MYVIMRCএবং আবার একটি নতুন বাফার তৈরি করুন।

আপনি এখন কি দেখতে পাচ্ছেন?


আমি যদি এর পরিবর্তে এটি ব্যবহার করতাম:

augroup inform_new_buffer
    autocmd!
    autocmd BufCreate * echom "New buffer!"
augroup end

তাহলে আমি ভাল থাকতাম। আমি একটি গ্রুপ অটোমন্ডম তৈরি করি, autocmd!কমান্ডটি সেই গোষ্ঠীর সমস্ত সংজ্ঞায়িত অটোমন্ডম সাফ করে । এটি গুরুত্বপূর্ণ, কারণ:

augroup inform_new_buffer
    autocmd BufCreate * echom "New buffer!"
augroup end

শুধু চান যোগ একই augroup তা।


অন্য কথায়, আমরা সমস্ত টাইপ করার একই কারণ fun!এবং command!এটি পরিবর্তিত সংস্করণগুলির চেয়ে !ওভাররাইডিংয়ের অনুমতি দেয় না।


এটা তোলে তিনি "শব্দার্থিক" এর অর্থ হাইলাইট করতে খুবই সহায়ক !:)
llinfeng
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.