ভিআইএম থেকে শেড-স্টাইলের প্রতিস্থাপন আদেশের সমতুল্য কি আছে?


14

আমি ভীম থেকে যে জিনিসগুলি মিস করি তার মধ্যে একটি হ'ল একটি প্রতিস্থাপন কমান্ড টাইপ করতে সক্ষম হয় যা একাধিক লাইনের উপর কাজ করবে, উদাহরণস্বরূপ:

:/begin/,/end/s/foo/bar/g

উপরোক্ত কমান্ডটি "বার" -এর জন্য "ফু" ব্যবহার করে "লাইগ" যুক্ত প্রথম লাইনের সাথে শুরু করে এবং "শেষ" ধারণ করে পরবর্তী লাইনের সাথে শেষ হয়।

ইমাসে অনুরূপ কিছু করার কোনও উপায় আছে কি?

উত্তর:


7

evilএর স্ট্রিপ-ডাউন সংস্করণ সরবরাহ করে ex, সুতরাং এটি সম্ভবত ড্রপ-ইন না বলে ধরে নেওয়া ভাল। তবে, আপনি যে উদাহরণ সরবরাহ করেছেন তা বাক্সের বাইরে কাজ করে, তবে সেই বিন্দুটি প্রথম লাইনের পূর্বে (যেমন, beginআপনার উদাহরণের লাইন)।


ভিমে অনুসন্ধানও বিন্দুতে শুরু হবে, যাতে আমি যা খুঁজছিলাম তার মতো শোনাচ্ছে। ধন্যবাদ!
ল্যারি কোলম্যান

8

এটি করার একটি উপায় এখানে কেবল বিল্ট-ইন কার্যকারিতা ব্যবহার করে:

  1. লাইনের পয়েন্টের সাথে যেটির প্রথম উপস্থিতি রয়েছে begin, টিপুন C-SPC

  2. এর পরবর্তী ঘটনায় যান end:

    C-s end RET

  3. প্রতিস্থাপন fooসঙ্গে bar:

    M-% foo RET bar RET !

এটি এই সত্যটি ব্যবহার করে যে এটি query-replaceযদি একটি থাকে তবে পুরো বাফারের পরিবর্তে সক্রিয় অঞ্চলে কাজ করবে।


অবশ্যই, আপনি একটি কাস্টম কমান্ডও নির্ধারণ করতে পারেন:

(defun replace-from-to (beg end str repl)
  (interactive "sBegin: \nsEnd: \nsString: \nsReplacement: ")
  (save-excursion
    (goto-char (point-min))
    (let ((start-pos (search-forward beg))
          (end-pos (search-forward end)))
      (replace-string str repl nil start-pos end-pos))))

এই আদেশটি সর্বদা বাফারের শুরু থেকে অনুসন্ধান করবে, সুতরাং আপনি যখন অনুরোধ করবেন তখন বিন্দুটি begin/ foo/ পরে হতে পারে end

এর মাধ্যমে একটি কী বাঁধাই সেট আপ করুন:

(global-set-key (kbd "C-c r") 'replace-from-to)

5

সাধারণভাবে, এটি এমন একটি জিনিস যা আপনি ব্যবহার narrow-to-regionকরবেন।

আপনি অঞ্চলটির শুরুতে কার্সারটি (উদাহরণস্বরূপ, অনুসন্ধান করে) C-SPCসরান এবং টিপুন , তারপরে অঞ্চলটির প্রান্তে যান এবং টাইপ করুন M-x narrow-to-region। এখন আপনি যে কোনও অনুসন্ধান জারি করতে পারেন এবং যে কমান্ডগুলি চান তা প্রতিস্থাপন করতে পারেন এবং সেগুলি কেবল বাফারের সংকীর্ণ অংশে প্রযোজ্য হবে। আপনার কাজ শেষ হয়ে গেলে, M-x widenবাফার সামগ্রীটি পুনরুদ্ধার করতে টাইপ করুন ।


4
যদি begin/ endকোনও প্রোগ্রামিং ভাষায় ডিলিমিটার হয় তবে আপনি সম্ভবত একটি কমান্ডে অঞ্চলটি নির্বাচন C-M-Spaceকরতে চালাতে mark-sexpপারেন।
dgised

1
ডিফল্ট বাইন্ডিং: C-x n n( narrow-to-region) এবং C-x n w( widen)।
এজেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.