ভিআইএম ব্যবহার করে প্রতিস্থাপন করুন, অনুসন্ধানের প্যাটার্নটির অংশটি পুনরায় ব্যবহার করুন


29

আমি এর সাথে কাজ করছি VImএবং কিছু প্রতিস্থাপন করার জন্য একটি অনুসন্ধান সেট এবং কমান্ড প্রতিস্থাপনের চেষ্টা করছি যেখানে আমি আমার অনুসন্ধান স্ট্রিংয়ের অংশ হিসাবে নিয়মিত প্রকাশটি পুনরায় ব্যবহার করতে পারি।

একটি সাধারণ উদাহরণ হ'ল একটি লাইন যেখানে আমি প্রতিস্থাপন (10)করতে চাই {10}যেখানে 10 কোনও সংখ্যা হতে পারে।

আমি এ পর্যন্ত এসেছি

  .s/([0-9]*)/what here??/

যা আমি চাই ঠিক সেই অংশের সাথে মেলে।

প্রতিস্থাপন এখন, আমি চেষ্টা

  .s/([0-9]*)/{\0}/

কিন্তু, এটি আউটপুট হিসাবে দেয় {(10)}

তারপরে, আমি চেষ্টা করেছিলাম

 .s/(\zs[0-9]*\ze)/{\0}/

যাইহোক, এটি আমাকে দিয়েছে ({10}), যা আমিও বন্ধ করি, তবে যা চাই তা নয়।

আমি মনে করি এর পরিবর্তে আমার অন্য কোনও ধরণের মার্কিং / ব্যাক-রেফারেন্সিং দরকার \0, তবে আমি কোথায় জানি তা জানি না। সুতরাং প্রশ্নটি হল, এটি কি ভিমে করা যেতে পারে, এবং যদি তা হয় তবে কীভাবে?

উত্তর:


37

\0পুরো ম্যাচ। এর কেবলমাত্র অংশটি ব্যবহার করতে আপনার এটির মতো সেট করতে হবে এবং \ 1 ব্যবহার করতে হবে

.s/(\([0-9]*\))/{\1}/

আরও বিশদ নির্দেশিকা আপনি এখানে বা ভিএম সাহায্যে পেতে পারেন।


দ্রষ্টব্য ক্যাপচারের জন্য প্রথম বন্ধনীগুলি হ'ল ব্যাকস্ল্যাশ-পলায়ন।
র্যান্ডল

0

আমি সম্প্রতি কিছু লিগ্যাসি কোড উত্তরাধিকার সূত্রে পেয়েছি এবং আমি সমস্ত উপস্থিতি যেমন প্রতিস্থাপন করতে চেয়েছিলাম:

print "xx"
print x,y
print 'xx'

থেকে

logging.info("xy") 

অথবা

logging.info(x,y)

পূর্ববর্তী উত্তরের উপর ভিত্তি করে এবং আশা করি যে কেউ এর দ্বারা উপকৃত হবে আমি নিম্নলিখিত কমান্ডটি ব্যবহার করেছি, যা সমস্ত উপস্থিতি পরিবর্তন করবে:

%s/print\( .*\)/logging.info\(\1\)/g

আপনি যদি বিকল্পটি %দিয়ে থাকেন .এবং অপসারণ করেন তবে /gআপনি শেষ হয়ে যাবেন

.s/print\( .*\)/logging.info\(\1\)

এটি আপনাকে প্রতিটি ম্যাচ অতিক্রম করতে এবং আপনি এটি পরিবর্তন করবেন কিনা তা চয়ন করতে সক্ষম করবে।


0

প্রতিটি ম্যাচ অতিক্রম করতে আপনাকে সক্ষম করার সর্বোত্তম উপায় হ'ল লাইন বাই লাইনে না গিয়ে কোডের শেষে "সি" যুক্ত করা is

%s/print\( .*\)/logging.info\(\1\)/gc

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