পাঠ্য অদলবদলের জন্য অনুসন্ধান / প্রতিস্থাপনের মতো বৈশিষ্ট্য


12

আমি প্রায়শই নিজেকে বুফের fooসাথে barএবং এর barসাথে প্রতিস্থাপনের চেষ্টা করতে দেখি foo

আমি সাধারণত যেভাবে এটি করি তা হয়:

  • 3 ক্যোয়ারী-প্রতিস্থাপিত: aaa -> @@@, bbb -> aaa,@@@ -> bbb
  • অটোমেশন ছেড়ে দিন এবং কেবল হাতে প্রতিস্থাপন করুন do

আমি অনুমান যে এটা কিছু ব্যবহার কাজ পাওয়ার সম্ভাবনা আছে ,সিনট্যাক্স query-replace-regexpপরীক্ষা হলে মিলেছে স্ট্রিং aaaবা bbb। তবে ফলাফলের বাক্য গঠনটি খুব জটিল হয়ে উঠবে, তাই আমি সত্যিই এটি চেষ্টা করে দেখিনি।

জিনিসটি হ'ল এটি কত সাধারণ কাজ, আমি মনে করি এটির একটি আরও ভাল, একক পদক্ষেপ, এটি করার পদ্ধতি অবশ্যই অন্তর্নির্মিত বা বিদ্যমান প্যাকেজের মধ্যে থাকতে হবে। আছে?


একক-পদক্ষেপের উপায় থাকতে পারে, তবে আপনার প্রথম উপায়টি খারাপ নয়, আইএমও। এবং আপনি যদি প্রতিস্থাপনের স্ট্রিংটি ডানদিক থেকে বেছে নেন তবে আপনি কেবল দ্বিতীয় পাসের জন্য নো-কোয়েরি প্রতিস্থাপন করতে পারেন।
ড্র হয়েছে

@ ড্রু নিয়মিত জন্য query-replace, আমি জানি যে M-% str1 str2পয়েন্টটি সরানো এবং হাত দিয়ে পরিবর্তনটি করা তার চেয়ে সাধারণত দ্রুত হয় । এটি দুর্দান্ত, কারণ কেবলমাত্র একটি ঘটনা ঘটলেও, দ্রুততম কী হবে তা নিয়ে ভাবতে আমার সময় নষ্ট করতে হবে না str1। আদর্শভাবে, আমি পাঠ্য বিপর্যয়টি ঠিক তত দ্রুত হওয়া চাই, যাতে আমি এটির বিষয়েও চিন্তা না করেই এটি ব্যবহার করতে পারি।
টি। ভেরন

কেউ একটি সহজ উত্তর প্রদান করবে। আপনি যা চান তা আপনি কোনও সন্দেহ করতে পারেন না, উদাহরণস্বরূপ, প্রতিস্থাপনের জন্য একটি লিস্প এক্সপ্রেশন ব্যবহার করে, পাঠ্যটি প্রতিস্থাপনের জন্য উল্লেখ করে। উদাহরণস্বরূপ, সোয়াপ আইডিয়ামের অনুরূপ কিছু ব্যবহার করুন (setq a (prog1 b (setq b a)))। এবং এমনকি একটি সহজ উপায় হতে পারে।
ড্রিউ

2
আমি \,(if \1 "b" "a")বিশেষত কুরুচিপূর্ণ (কোনও রেজিপ্সপের বিপরীতে \(a\)\|b) খুঁজে পাই না , তবে এখনও যদি শব্দটি বিরক্ত করে তবে শব্দগুলি দু'বার টাইপ করতে হবে।
রাজনীতি 17

2
না কেন \(aaa\)\|bbb?
রাজনীতি

উত্তর:


8

এখানে একটি ছোট আদেশ রয়েছে যা এটি করবে:

(defun query-swap-strings (from-string to-string &optional delimited start end)
  "Swap occurrences of FROM-STRING and TO-STRING."
  (interactive
   (let ((common
          (query-replace-read-args
           (concat "Query swap"
                   (if current-prefix-arg
                       (if (eq current-prefix-arg '-) " backward" " word")
                     "")
                   (if (use-region-p) " in region" ""))
           nil)))
     (list (nth 0 common) (nth 1 common) (nth 2 common)
           (if (use-region-p) (region-beginning))
           (if (use-region-p) (region-end)))))
  (perform-replace
   (concat "\\(" (regexp-quote from-string) "\\)\\|" (regexp-quote to-string))
   `(replace-eval-replacement replace-quote (if (match-string 1) ,to-string ,from-string))
   t t delimited nil nil start end))

আপনাকে ধন্যবাদ, আমি নিজেই লিখতাম এমন কিছুর চেয়ে সেগুলি আরও বিস্তৃত! সম্ভবত আপনি বাস্তবায়িত বৈশিষ্ট্যগুলি বিস্তারিতভাবে বর্ণনা করতে পারেন? আমি দেখতে পাচ্ছি যে উপসর্গ যুক্তি দিয়ে আপনি পিছনের দিকে চলে যান, এটি প্রয়োজনে কেবলমাত্র অঞ্চলে প্রতিস্থাপন সম্পাদন করে ... বা এটি query-replaceকি বিপরীতটির জন্য কেবল একটি পুনর্লিখন , যাতে এটি এর সমস্ত বৈশিষ্ট্য ধরে রাখে? এটি আমার ইমাসে 100% সংজ্ঞাটির সাথে মেলে না, তবে আমি এখনও 24.5 এর সাথে রয়েছি ...
টি। ভেরন

@ টি.ভেরন এটি query-replaceসর্বশেষতম সংস্করণ থেকে ফাংশনগুলির পরিবার থেকে কেবল একটি মানক সংস্থা , তাই এটি সমস্ত বৈশিষ্ট্য ধরে রাখে। ফাংশনটির শেষে আমি ইমাক্স ম্যানুয়ালটিতে উল্লিখিত স্ট্রিংগুলি অদলবদলের প্রস্তাবিত উপায় যুক্ত করেছি।
link0ff

আমি সম্ভবত খুব দ্রুত গ্রহণ করেছি। আমি যদি মন্তব্য করে backwardএবং region-noncontiguous-pকল থেকে কল করতে পারি তবে ফাংশনটি এখানে কেবল (ইমাস 24.3) কাজ করে perform-replace। এটি কি কোনও সাধারণ সমস্যা, বা এর অর্থ হ'ল ইন্টারফেসটি perform-replaceসংস্করণগুলির মধ্যে পরিবর্তিত হয়েছে?
টি ভেরন

হ্যাঁ, সর্বশেষ সংস্করণে যুক্ত হওয়া এই 2 টি আর্গুমেন্টের সাথে ইন্টারফেসটি পরিবর্তিত হয়েছে, সুতরাং সেগুলি পূর্ববর্তীগুলিতে উপস্থিত নেই,
ff

2
এই সমাধানটিও এখন ঠিক আছে বলে মনে হয়।
নাম

9

প্লুর ইনস্টল করুন

এবং কমান্ড চালান plur-query-replace

এবং ইনপুট {foo,bar}এবং তার প্রতিস্থাপন{bar,foo}

yঘটনাগুলি পছন্দসই হিসাবে প্রতিস্থাপন করতে আঘাত করুন ।

এই কমান্ডটির বৈকল্পিকগুলিও অ-ইন্টারেক্টিভ, এবং অনুসন্ধানের মতো রয়েছে।


ধন্যবাদ! প্লুরের উদ্দেশ্যটিও আমি এমন কিছু বিষয় যা মাঝে মাঝে সন্ধান করেছিলাম, আমি অবশ্যই এটি দেখতে পাব। আমার একমাত্র দ্বিধা উপরের প্যাকেজটির লেখকের মন্তব্য থেকে উদ্ভূত ...;)
টি। ভেরন

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