ভিম স্নিপেট প্লাগইনগুলির মধ্যে পার্থক্য কী?


25

ভিআইএম এর জন্য প্রচুর পরিমাণে স্নিপেট প্লাগইন রয়েছে: আলটিসনিপস , স্নিপমেট , এক্সপিটেমপ্লেট , নিউসনিপেট এবং আরও অনেক কিছু।

তাদের সকলের পক্ষে মতামত এবং কম এবং আরও কম নির্ভরতা রয়েছে। এখনও অবধি আমি আল্টিসনিপ ব্যবহার করছি তবে এর সাথে কখনই সম্পূর্ণ সন্তুষ্ট হইনি।

যেহেতু আমাদের কাছে প্লাগইন পরিচালকদের সম্পর্কে খুব আকর্ষণীয় এবং সম্পূর্ণ প্রশ্ন রয়েছে আমি মনে করি স্নিপেট প্লাগইনগুলি সম্পর্কে একই ধরণের ব্যাখ্যা রাখা বেশ কার্যকর হবে।

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


1
আপনার কাছে এই ম্যাট্রিক্সটি মার্ক ওয়েবার উইকি: vim-wiki.mawercer.de/wiki/topic/…
লূক হার্মিটে

2
আইএমএইচও এটি বেশ জেনেরিক, সম্ভবত আপনি যদি "এর সাথে কখনই পুরোপুরি সন্তুষ্ট হন না" বিস্তারিতভাবে বর্ণনা করেন? আমি শোগোর "নিওসনিপেট.ভিম" ব্যবহার করি।
ভ্যানলাসার

আপনার এখান থেকে তথ্য সহ উইকি আপডেট করা উচিত। ধন্যবাদ।
খ্রিস্টান ব্র্যাব্যান্ড 18

@ ক্রিশ্চিয়ান ব্র্যাব্যান্ড: হ্যাঁ আমার কিছুটা সময় আসার সাথে সাথে (পরের কয়েক দিনের মধ্যে) আমি এটি আপডেট করব।
statox

উত্তর:


22

আমি বেশ কয়েক সপ্তাহ ধরে আল্টিসনিপ ব্যবহার করছি

আমি মনে করি এই প্লাগইনটির প্রধান সুবিধাগুলি নিম্নলিখিত:

  • প্রচুর সংখ্যক স্নিপেট পাওয়া যায় এমনকি এটি বেশ দ্রুত।
  • একটি নতুন স্নিপেট সংজ্ঞায়িত করার জন্য বেসিক সিনট্যাক্সটি বোঝা সহজ, সুতরাং আপনি যা করতে চান তা করে দ্রুত একটি নতুন স্নিপেট তৈরি করা সহজ। (আরও জটিল স্নিপেটের জন্য কিছু অতিরিক্ত কাজের প্রয়োজন হতে পারে))
  • এটি বাক্সের বাইরে খুব ভাল কাজ করে; একটি প্রাথমিক কনফিগারেশন আপনাকে স্নিপেটগুলি খুব দ্রুত ব্যবহার করতে দেয়।
  • এটি সত্যই কনফিগারযোগ্য। এমনকি যদি বেসিক কনফিগারেশনটি ভালভাবে কাজ করে তবে আপনি যদি একজন পাওয়ার ব্যবহারকারী হন তবে আপনি সত্যিই এটি বেশ সূক্ষ্মভাবে টিউন করতে পারেন।

সর্বপ্রথম আলটিসনিপস হ'ল একটি স্নিপেট ইঞ্জিন যার অর্থ প্লাগইন স্নিপেটগুলি ব্যবহারের জন্য বৈশিষ্ট্যগুলি সরবরাহ করে তবে স্নিপেটগুলি তাদের সরবরাহ করে না। স্নিপেটগুলি পেতে, লেখক ভিম-স্নিপেটের প্রস্তাব দেন ।

দুটি প্লাগইন ইনস্টল হয়ে গেলে আপনি আপনার স্নিপেটগুলি ব্যবহার করতে সক্ষম হবেন।

স্নিপেট: 'সংজ্ঞা নিদর্শন নিম্নলিখিত নামে ফাইলের মধ্যে সংরক্ষণ করা হয় ft.snippets, ft_*.snippetsঅথবা ft/*, যেখানে ftবর্তমান নথির filetype:' 'এবং *একটি শেল মত ওয়াইল্ডকার্ড ম্যাচিং কোনো খালি স্ট্রিং সহ স্ট্রিং। (নোট করুন ফাইল টাইপের সিনট্যাক্সের মতন cuda.cppসমর্থনযোগ্য supported)

কোনও ফাইল টাইপের জন্য নির্দিষ্ট এই স্নিপেটগুলি তখনই প্রসারিত হয় যখন বাফারের ফাইল টাইপ সেট থাকে। allসমস্ত বাফারগুলিতে প্রসারিত স্নিপেটগুলি তৈরি করতে একটি বিশেষ ফাইল টাইপ উপলব্ধ।

ভিআইএম-স্নিপেটগুলি সরবরাহিত স্নিপেটগুলি ছাড়াও, ব্যবহারকারী তার নিজস্ব স্নিপেটগুলি সংজ্ঞায়িত করতে পারে। আমার সুপারিশটি ~/.vim/my-snippets/Ultisnipsহ'ল এগুলি ডিরেক্টরিতে এইভাবে রাখুন আলটিসনিপগুলি অতিরিক্ত কনফিগারেশন ছাড়াই তাদের খুঁজে পাবেন এবং এগুলি একটি ডটফাইল সংগ্রহস্থলে রক্ষণাবেক্ষণ করা সহজ।

স্নিপেটগুলি প্রসারণ করতে, আলটিসনিপস একটি পরিবর্তনশীল সরবরাহ করে g:UltiSnipsExpandTrigger যা ম্যাপিংকে সংজ্ঞায়িত করে যা প্রসারণকে ট্রিগার করবে (আমি বেছে নিয়েছি **যা আমার পক্ষে বেশ সুবিধাজনক)। নোট করুন যে একটি সংহতকরণ সম্ভব হওয়া উচিত তবে আমি নিজে এটি পরীক্ষা করে নি)।

শক্তি ব্যবহারকারীদের জন্য, আলটিসনিপস সম্প্রসারণের আচরণটি কাস্টমাইজ করার জন্য বা এটিকে অন্যভাবে ট্রিগার করার জন্য কিছু ফাংশন সরবরাহ করে। দেখ:h UltiSnips-trigger-functions


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

অবশেষে এখানে স্ক্রিনকাস্টগুলির একটি তালিকা রয়েছে যা প্লাগইনটিতে একটি ভাল ভূমিকা দেয়:


আপনি কীভাবে এটি তৈরি করবেন জানেন যাতে এটি প্রসারিত না হলে এটি প্রসারিত না হয় যদি না এর পূর্ববর্তী সাদা অংশ বা এটি দ্বারা >(HTML এর বন্ধনী বন্ধনী হিসাবে। বিকল্পটি iএটি এটিকে এটি তৈরি করে তাই এটি এটি প্রসারিত করে এমনকি এটি কোনও শব্দের মাঝখানে থাকলেও যা ভাল নয়
টালবয়

13

আমি যখন ভিম ব্যবহার শুরু করি তখন থেকেই আমি আসল স্নিপমেটটি ব্যবহার করি।

  • এটির বাহ্যিক নির্ভরতা নেই।
  • এটি খুব সাধারণ বাক্য গঠন ব্যবহার করে।
  • এটি সেট আপ করা খুব সহজ।
  • এটি ২০০৯ সাল থেকে পরিত্যক্ত রয়েছে।

আমার অভিযোগ করার কিছুই নেই।


16
এই প্রথম আমি কাউকে বৈশিষ্ট্য হিসাবে বিসর্জনের উল্লেখ করতে দেখেছি। : ডি
মুড়ু

6
একটি পরিত্যক্ত প্রকল্পটি একটি স্থিতিশীল প্রকল্প। আপনার স্থানীয় উদাহরণটি পুরানো হয়ে গেছে বা কোনও এপিআই পরিবর্তনের সাথে আপনার ওয়ার্কফ্লো ভেঙে যাচ্ছে এমন কোনও আপডেট সম্পর্কে আপনাকে উদ্বিগ্ন হওয়ার দরকার নেই। আপনি এটি ইনস্টল করার সময় যদি এটি আপনার চাহিদা পূরণ করে তবে তা চিরকাল তা চালিয়ে যাবে। আপনার প্রয়োজন পরিবর্তন না হলে। স্থায়িত্ব হ'ল আমি যে কোনও সরঞ্জামে সন্ধান করা # 1 বৈশিষ্ট্য ।
রোমেনেল

3
"আপনি এটি ইনস্টল করার সময় যদি এটি আপনার চাহিদা পূরণ করে তবে তা চিরকালের জন্য তা চালিয়ে যাবে। যদি না আপনার প্রয়োজনীয়তা পরিবর্তন হয়।" অথবা আপনি একটি বাগ খুঁজে পেতে পারেন, সেই মুহুর্তে আপনার নিজের এটি ঠিক করতে হবে, এটি ঠিক করার জন্য অন্য কাউকে খুঁজে বের করতে হবে বা বিকল্পের সন্ধান করতে হবে; একটি যা সম্ভবত পরিত্যাজ্য হয়নি।

1
আপনার উত্তর @ রোমেনেলের জন্য ধন্যবাদ! আমার একটি প্রশ্ন আছে: আপনি বলেছিলেন যে প্লাগইনটি পরিত্যাগ করা হয়েছে, তবে রিডম একটি নতুন সংস্করণে পুনর্নির্দেশ করে যা বেশ সক্রিয় বলে মনে হয় এবং বেশ কয়েকটি কমিট কিছু জিনিস ঠিক করে বলে মনে হয় নতুনটি ব্যবহার করা কি ভাল নয়?
স্ট্যাটক্স

1
আল্ট্রাএসনিপসে কয়েকটি বাগ এবং ডকুমেন্টেশন ত্রুটি রয়েছে যা একটি কম-সুখকর পরিচয়সূচক অভিজ্ঞতার জন্য তৈরি করে। শেষ পর্যন্ত এটি চালিয়ে যাওয়ার পরে, আমি স্নিপমেট চেক আউট করার সিদ্ধান্ত নিয়েছি এবং স্থিতির জন্য @ রোমেনেলের যুক্তি বুঝতে পারি understand
chb

7

এখানে মি-টেম্পলেট থেকে বৈশিষ্ট্যগুলির একটি তালিকা দেওয়া আছে । Discl .: আমি এর রক্ষণাবেক্ষণকারী।

  • টেমপ্লেট-ফাইলগুলি প্রসারিত করা যেতে পারে:
    • একটি নতুন বাফার খোলার সময় স্বয়ংক্রিয়ভাবে (.vimrc থেকে নিষ্ক্রিয় না হলে),
    • স্পষ্টভাবে মেনু বা কমান্ড লাইনের মাধ্যমে,
    • স্নিপেটের মতো ফ্যাশনে INSERT- মোড থেকে;
    • স্নিপেট দিয়ে নির্বাচনকে ঘিরে ভিজুয়াল-মোড থেকে - পার্শ্ববর্তীটি স্নিপেটের বিভিন্ন অঞ্চলে প্রয়োগ করা যেতে পারে (যেমন একটি whileনিয়ন্ত্রণ-বিবৃতিতে কোড বা শর্ত অঞ্চল );
  • সমস্ত স্নিপেটগুলি তাদের নিজস্ব টেম্পলেট-ফাইলে সংজ্ঞায়িত করা হয়েছে - অন্য সমস্ত স্নিপেট ইঞ্জিনগুলি ফাইল টাইপের জন্য একটি ফাইল ব্যবহার করে এবং এতে সমস্ত স্নিপেটগুলি রাখে;
  • টেমপ্লেট-ফাইলগুলি ব্যবহারকারী দ্বারা বা একটি নির্দিষ্ট প্রকল্পের প্রসঙ্গে ওভাররাইড করা যেতে পারে;
  • ফাইল টাইপ নির্দিষ্ট স্নিপেটগুলি INSERT- মোডের জন্য সংজ্ঞায়িত করা যায় (তাদের উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে, যেমন সি স্নিপেটগুলি সি ++, জাভা ইত্যাদি থেকে ব্যবহার করা যেতে পারে), প্রতিটি স্নিপেটের সাথে মিলে যাওয়া স্নিপেটের তালিকা উপস্থাপন করা হবে;
  • গণিত ভিএমএল এক্সপ্রেশনগুলি সন্নিবেশ করা যেতে পারে;
  • ভিএমএল নির্দেশাবলী সম্প্রসারণের সময় কার্যকর করা যেতে পারে - আমি এটি স্বয়ংক্রিয়ভাবে হারিয়ে যাওয়া অন্তর্ভুক্ত করতে বা বিবরণী আমদানি করতে ব্যবহার করি;
  • টেমপ্লেট-ফাইলগুলি ফাংশন-মতো পদ্ধতিতে অন্যান্য টেম্পলেট-ফাইলগুলি অন্তর্ভুক্ত করতে পারে (প্যারামিটারগুলি এমনকি সমর্থিত) - আফাইক, খুব কম স্নিপেট ইঞ্জিনগুলি এটি প্রয়োগ করে, তারা এমনকি স্নিপেট এলিয়াসগুলি সমর্থন করতে সক্ষম হয় না, যা ধন্যবাদ বাস্তবায়নের জন্য তুচ্ছ এই বৈশিষ্ট্য ;
  • আমার স্থানধারক-সিস্টেমের সাথে সম্পূর্ণ সংহত;
  • রি-ইনডেন্টেশন (যদি ইচ্ছা হয়), এবং পাইথন ইনডেন্টেশন সমর্থন করে;
  • ভিম ভাঁজ সঙ্গে ভাল কাজ করে;
  • I18n বন্ধুত্বপূর্ণ;
  • যখন বেশ কয়েকটি স্নিপেট মিলছে, একটি উন্নত সমাপ্তি মেনু পপ আপ হবে (এটি YouCompleteMe পপআপ মেনু দ্বারা অনুপ্রাণিত হয়েছে);
  • স্টাইল অপশন স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয় (কিভাবে আপনি আপনার বন্ধনী পছন্দ করেন? if (...) {\n}? if (...)\n{\n}অন্য কিছু?), এবং অবশ্যই, তারা জরিমানা বর্তমান প্রকল্প, অথবা বর্তমান filetype:, অথবা এমনকি উভয় উপর নির্ভর করে টিউন করা যেতে পারে;
  • প্লাগইনটি 100% ভিএমএল। পাইথন যদিও টেমপ্লেট ফাইল থেকে ব্যবহার করা যেতে পারে।
  • মিউ-টেম্পলেট দুটি লাইব্রেরি প্লাগইন (lh-vim-lib এবং lh-dev) এবং আমার স্থানধারক সিস্টেমে (lh-bracket) উপর নির্ভর করে - এজন্য আমি ঘোষিত ফাইলগুলি সরবরাহ করার সাথে সাথে আমি এটি ভিএএম বা ভিমফ্লেভারের সাথে ইনস্টল করার প্রস্তাব দিই I নির্ভরতা;
  • লাইসেন্স কোড জেনারেশনের সাথে সামঞ্জস্যপূর্ণ - এর অর্থ হ'ল মি-টেম্পলেট কোডটি জিপিএলভি 3 এর অধীন, স্নিপেটগুলি নয়, আপনি সেগুলি মালিকানাধীন কোডে ব্যবহার করতে পারেন: কিছু স্নিপেট বুস্ট সফ্টওয়্যার লাইসেন্সের অধীনে রয়েছে;

  • উপস্থিত কোনও স্থানীয় ভিএমআরসিএস লোড হওয়ার পরে সম্প্রসারণ ঘটে - প্রসারণটি সম্পন্ন হওয়ার আগে প্রকল্প-নির্দিষ্ট ভেরিয়েবলগুলি সেট করার জন্য।

  • টম লিঙ্কের স্টেকহোল্ডার্স প্লাগইনকে ধন্যবাদ, µপ্লেফলেটটি স্থানধারককে বেঁধে রেখেছে (একটি নামযুক্ত স্থানধারক একই নাম দিয়ে অন্য স্থানধারককে সংশোধন করে)। স্টেকহোল্ডার ইনস্টল না করা আপনাকে e টেম্পলেটটি ব্যবহার করা থেকে বিরত রাখবে না।

পুরোপুরি সত্যি বলতে, টেমপ্লেট সিনট্যাক্সটি কিছুটা জটিল, এবং স্থানধারক সিস্টেমটি প্রথম স্থানধারক প্রজন্মের অন্তর্গত - মিউ-টেম্পলেটটি ভিমের জন্য প্রাচীনতম টেম্পলেট / স্নিপেট ইঞ্জিন।

তবে, এটি স্নিপেটকে অন্যান্য স্নিপেটগুলি (শর্তাধীন এবং পরামিতি সহ) অন্তর্ভুক্ত করার অনুমতি দেয় যা ওভাররাইড হতে পারে বা না পারে তা বেশ গুরুত্বপূর্ণ। সাধারণত অ্যাপ্লিকেশন হয়

  • সি ++ ফাইল টেম্পলেট

    1. যার মধ্যে একটি ফাইল শিরোনাম (সঠিক কপিরাইট নোটিশ অন্তর্ভুক্ত করার জন্য প্রতিটি প্রকল্পের জন্য সাধারণত বিভিন্নভাবে সূক্ষ্ম সুর করা) অন্তর্ভুক্ত থাকে
    2. তারপরে বর্তমান ধরণের ফাইলের (.h, .cpp, বা ইউনিট পরীক্ষা ফাইল) জন্য টেমপ্লেটটি সর্বোত্তমভাবে লোড করুন
      • শিরোনাম-ফাইলের ক্ষেত্রে, পুনরায় পুনর্বিবেচনা রক্ষীদের অন্তর্ভুক্ত করা হবে - যেভাবে তাদের গণনা করা হবে সেগুলি ওভাররাইড করা যেতে পারে (আবার প্রকল্পের নীতি অনুসরণ করতে)
      • .cpp ফাইলের ক্ষেত্রে, যদি পাওয়া যায় তবে মিলে .h ফাইলটি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়
  • এলএইচ-সিপ্পিতে আমার জেনেরিক শ্রেণির স্নিপেট / উইজার্ড রয়েছে। এবং বেশ কয়েকটি বিশেষ শ্রেণীর ধরণের যা এই সাধারণ শ্রেণীর টেম্পলেটটি ব্যবহার করে তবে বিভিন্ন পরামিতি সহ।


আপনার উত্তরের জন্য ধন্যবাদ! আমার একটি প্রশ্ন আছে: আপনি বলেছিলেন All snippets are defined in their own template-file -- all other snippet engines use one file per filetype and put all snippets in it যে সাধারণ স্থাপত্যের তুলনায় এই আর্কিটেকচারটির সুবিধা কী?
স্ট্যাটক্স

@ স্টাটক্স আমি বলব, এটি একটি স্নিপকেট রক্ষণাবেক্ষণের সমস্যা। কিছু স্নিপেট অতিরিক্ত জটিল। internals/class-skeletonউদাহরণস্বরূপ lh-cpp এ দেখুন । আমি এটি কন্ট্রোল-স্টেটমেন্ট স্নিপেটের সাথে মিশ্রিত না করতাম। তবে আমি অবশ্যই স্বীকার করব যে সমস্ত নিয়ন্ত্রণ বিবৃতি একসাথে থাকা সমস্যাযুক্ত হবে না। তদুপরি, এই পদ্ধতির জন্য ধন্যবাদ, আমি খুব সহজেই আমার স্নিপেটগুলি ওভাররাইড করতে পারি,
ফ্লাইগুলিতে

প্রকৃতপক্ষে আমি যখন আপনার লিঙ্কটি দেখছি তখন বুঝতে পারি যে কিছু স্নিপেটগুলি কেন তাদের নিজস্ব ফাইলে আরও ভাল থাকে। আপনার স্পষ্টতার জন্য ধন্যবাদ।
স্ট্যাটক্স

1
@ স্টাটক্স প্রকৃতপক্ষে, অনেকগুলি স্নিপেটগুলি আমার কাছে জটিল হতে থাকে: তারা যথাসম্ভব স্মার্ট জিনিসগুলি সনাক্ত করে, অনুদান দেয় এবং চেষ্টা করে। বেশিরভাগ সময় আমি কোডটি অটোলোজেড ফাংশনে স্থানান্তরিত করি তবে কখনও কখনও এটি একে অপরকে কল করে এমন একাধিক স্নিপেট ব্যবহার করে আরও বেশি বোঝার সৃষ্টি করে (এবং প্রকল্পের প্রয়োজনে সুরক্ষিত করা যায় এমন প্রকরণের পয়েন্ট হিসাবে কাজ করে -> কপিরাইট বিবৃতি, ...)
লুক হার্মিটে

4

স্নিপমেট এবং আলটিসনিপস ভিমের জন্য সর্বাধিক জনপ্রিয় দুটি স্নিপেট ইঞ্জিন। উভয়ই টেক্সটমেটের স্নিপেট সিনট্যাক্স থেকে অনুপ্রাণিত। UltiSnips সমস্ত স্নিপমেট স্নিপেট চালাতে পারে তবে আরও শক্তিশালী করার জন্য অতিরিক্ত সিনট্যাক্স রয়েছে।

থাম্বের একটি ভাল নিয়ম হ'ল যদি আপনার ভিমে অজগর সমর্থন থাকে তবে UltiSnips ব্যবহার করুন। যদি তা না হয় তবে স্নিপমেট ব্যবহার করুন।

আমার মধ্যে .vimrc, আমি পাইথনের প্রাপ্যতার উপর নির্ভর করে প্লাগইন লোড করি (প্লাগ ব্যবহার করে)।

if (has('python') || has('python3'))
    Plug 'SirVer/ultisnips'
else
    Plug 'garbas/vim-snipmate'
    Plug 'MarcWeber/vim-addon-mw-utils' "required for snipmate
    Plug 'tomtom/tlib_vim' "required for snipmate
endif

UltiSnips এটির স্নিপেটে পাইথন কোডগুলি চালাতে পারে, এটি কিছু দুর্দান্ত কৌশলগুলি করার অনুমতি দেয়। এটি আমার পছন্দের একটি স্নিপেট যা কোনও পাঠ্যের চারপাশে একটি বাক্য আঁকেন ( আমি কীভাবে গণিতের বক্তৃতায় নোট নিতে সক্ষম হব তা থেকে লাটেক্স এবং ভিম | গিলস ক্যাসেল )

snippet box2 "Box"
`!p snip.rv = '┌' + '─' * (len(t[1]) + 2) + '┐'`
│ $1 │
`!p snip.rv = '└' + '─' * (len(t[1]) + 2) + '┘'`
$0
endsnippet

এই স্নিপেটের সাহায্যে আমি এরকম কিছু আউটপুট করতে পারি:

┌─────────────────────┐
│ this is a cool box! │
└─────────────────────┘
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.