একাধিক পছন্দ বিকল্প?


15

সাধারণত, cবিকল্পের বিকল্পটি আমাকে দুটি বিকল্প দেয়: (y) এস বা (এন) ও। বেশিরভাগ সংখ্যক হ্যাঁ বিকল্পগুলি বেছে নেওয়া কি সম্ভব?

উদাহরণ

ফাইল

person: Alice
dog: Tobby
person: Bob

প্যাটার্ন 1 :%s/person:/woman:/c

প্যাটার্ন 2 :%s/person:/man:/c

প্যাটার্ন 1 এবং 2 তে একই সন্ধানের ধরণ রয়েছে তবে আলাদা প্রতিস্থাপনের ধরণ রয়েছে। আমি প্রতিস্থাপনের জন্য 1, (2) প্রতিস্থাপনের জন্য 2 বা (এন) কোনও প্রতিস্থাপনের জন্য (1) টিপে বিকল্পের সাহায্যে তাদের এক প্যাটার্নে একীকরণ করতে চাই।

উত্তর:


19

বাস্তবায়ন :s//cস্থির; আপনি যা সন্ধান করছেন তা হ'ল একটি ভিমস্ক্রিপ্ট এক্সপ্রেশন ( :help sub-replace-expr) দ্বারা প্রতিস্থাপন । আপনি এর মাধ্যমে একটি একক- getchar()সংখ্যাটি জিজ্ঞাসা করতে পারেন , বা এর মাধ্যমে আরও দীর্ঘ সংখ্যার জন্য প্রম্পট করতে পারেন input():

:%s/person:/\=get(['woman', 'man'], getchar() - char2nr(1), submatch(0)) . ':'/
:%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/

3কোনও প্রতিস্থাপন সম্পাদন করতে আপনি একটি উচ্চতর নম্বর ( আপনার উদাহরণে) প্রবেশ করতে পারেন।


আপনার যদি প্রায়শই এটির প্রয়োজন হয় তবে এটির জন্য একটি কাস্টম Query()ফাংশনটি সংজ্ঞায়িত করা বুদ্ধিমানের কাজ হবে। সেখানে, আপনি একটি যুক্ত করতে পারেন :redraw, যাতে আপনি যে প্রতিস্থাপনগুলি ইতিমধ্যে ঘটেছে তা দেখতে পান।


কমান্ডটি সমস্যাযুক্ত বলে মনে হচ্ছে। আমি চেক কমান্ডটি যুক্ত করার পরে এটি কাজ করে::%s/person:/\=get(['woman', 'man'], input('Your choice: ') - 1, submatch(0)) . ':'/c
লারনার জাং

cকমান্ডটি যুক্ত করার ফলে আমার একটি স্ট্রিং প্রতিস্থাপনের জন্য দুটি পদক্ষেপের প্রয়োজন হবে যা আমি মনে করি অযথা less
লারনার ঝাং

1

আমার আসল প্রশ্নটির জন্য সমস্ত ধন্যবাদ! আমি এখন :SubstituteChoicesআমার প্যাটার্নসঅনেক্সট প্লাগইনে একটি কমান্ড অন্তর্ভুক্ত করেছি , যা একটি দৃ implementation় বাস্তবায়ন সরবরাহ করে। প্রশ্নের উদাহরণটির মাধ্যমে সমাধান করা হবে:

:%SubstituteChoices/person:/woman:/man:/
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.