গ্রেপ / এসকি / এজি আউটপুট মোডগুলি থেকে কোয়েরি-রিপ্লেজ ব্যবহার করার কোনও উপায় আছে কি?


31

আমি সচেতন find-grep-dired, সংশ্লিষ্ট ফাইলগুলি চিহ্নিত করে এবং তারপরে চিহ্নিত ফাইলগুলিতে Qচালনার dired-do-query-replace-regexpজন্য টিপছি। দুর্ভাগ্যক্রমে এর জন্য গ্রেপ পুনরায় চালু করা দরকার এবং গিট-গ্রেপ, অ্যাক, বা এজি ব্যবহার করা বা ব্যবহার করতে স্যুইচ করা দরকার find-grepযা অনুসন্ধানের জন্য আলাদা সিনট্যাক্স রয়েছে।

আমি এ সম্পর্কেও সচেতন multi-occurএবং occur-edit-modeএটির জন্য অনুসন্ধানটি পুনরায় চালু করা দরকার। শেষ ag-diredপর্যন্ত ফাইলের সামগ্রীতে নয়, ফাইলের নামের সাথে মিলছে বলে মনে হচ্ছে।

আমার বর্তমান পদ্ধতিটি গ্রেপ আউটপুট উত্পন্ন করা এবং তারপরে গ্রেপ বাফারে শুরু হওয়া ম্যাক্রো চালানো এবং প্রতিটি ম্যাচ ঘুরে দেখে এটি পরিবর্তন করা। আমি query-replaceপাওয়া ম্যাচের সেট উপর সরাসরি ব্যবহার করতে পছন্দ করব ।

আমি যা করতে চাই তা হয় তাড়াতাড়ি বিদ্যমান গ্রেপ আউটপুট থেকে একটি ডায়ার্ড বাফার তৈরি করা যাতে আমি উপযুক্ত ফাইলগুলি চিহ্নিত করতে পারি এবং সেগুলিতে ক্যোয়ারী-রেজিপ্স্প কল করতে পারি, বা গ্রেফ আউটপুটটিকে বাফারগুলির তালিকায় রূপান্তর multi-occurকরতে পারি যাতে আমি এটি ব্যবহার occur-edit-modeকরতে পারি এটি জায়গায় সম্পাদনা query-replaceকরুন এবং সেই বাফারটিতে চালান ।

এই কার্যকারিতাটি কি বিদ্যমান, বা অন্য কোনও কার্যপ্রবাহ যা এই সমস্যাটি সমাধান করে?

উত্তর:


28

@ মালাবারবা গ্রেপ wgrep/ এসকে / এজি ফলাফল সম্পাদনা করার জন্য প্যাকেজ ব্যবহারের কথা উল্লেখ করেছেন ।

আমি কীভাবে প্যাকেজ ব্যবহার করে 'বর্ধিত ফলাফলগুলি সম্পাদনা করতে agপ্যাকেজ এবং wgrep-agপ্যাকেজগুলি ব্যবহার করি তার একটি বিশদ ওয়াক- থ্রো লিখতে চাই multiple-cursors

এই প্যাকেজগুলি মেলপা মাধ্যমে উপলব্ধ। আপনার সিস্টেমে আপনার agনাম_সিলভার_সন্ধানকারী ইনস্টল থাকাও দরকার ।

এই ওয়াক-থ্রুটি সেই ক্ষেত্রে প্রযোজ্য যেখানে আপনি যে সমস্ত / নির্বাচিত অবস্থান agখুঁজে পেয়েছেন তাতে একক লাইন সম্পাদনা করার উপায় খুঁজছেন ।

  • agআপনার সিস্টেমে এবং উপরে উল্লিখিত ইমাস প্যাকেজগুলি ইনস্টল করুন।

  • agআপনার নির্দিষ্ট রেজেক্সের সাথে মেলে এমন সামগ্রীগুলির সাথে অনুসন্ধানের ফাইলগুলিকে সমর্থন করে। agপ্রকল্পের মূলটি খালি .gitফোল্ডারটি সেখানে রাখার সবচেয়ে সহজ উপায় । তারপরে সন্ধানটি ব্যবহার করে করুন M-x ag-project-regexp

  • অগ্রণী অনুসন্ধানের ফলাফল বাফারটি ডিফল্টরূপে সম্পাদনাযোগ্য নয়। এটিকে সম্পাদনযোগ্য করে তোলার M-x wgrep-change-to-wgrep-modeজন্য, wgrep-ডিফল্ট বাঁধাই বা ব্যবহার করুন C-c C-p

  • এখন আপনি যদি আপনার সমস্ত ফাইলগুলিতে 'abcdef' পরিবর্তন করে 'ghijkl' এ পরিবর্তন করতে চান তবে আপনি 'abcdef' সন্ধান করতে পারেন এবং Ag ফলাফল বাফার সেই স্ট্রিং সহ সমস্ত লাইন প্রদর্শন করবে। তারপরে আপনি সেই বাফারটিকে সম্পাদনযোগ্য করে তুলুন এবং সেই স্ট্রিংগুলিকে ম্যানুয়ালি পরিবর্তন করুন এবং সেই পরিবর্তনগুলি M-x wgrep-finish-editডিফল্ট বাইন্ডিং করার বা ব্যবহার করার ক্ষেত্রে প্রকৃত ফাইল বাফারগুলিতে প্রতিফলিত হবে C-c C-e। আপনি query-replace-regexpযে অনুসন্ধান প্রতিস্থাপন করতে ব্যবহার করতে পারেন।

  • আমি multiple-cursorsদ্রুত রিফ্যাক্টরিংয়ের জন্য ব্যবহার করতে পছন্দ করি যাতে আমার একাধিক সম্পাদনাগুলি একসাথে কোথায় ঘটছে তার সত্যিকারের প্রতিক্রিয়া দেখতে পাচ্ছি। সেই এজি ফলাফলের বাফারে এবং কলটিতে আপনি যে স্ট্রিংটি প্রতিস্থাপন করতে চান তা হাইলাইট করুন এবং আপনি M-x mc/mark-all-like-thisএকই সাথে একাধিক পয়েন্টে স্টাফ সম্পাদনা করতে দেখলে বিস্মিত হবেন।

  • একবার আপনি সম্পাদনাগুলিতে খুশি হয়ে গেলে, যেমন আমি উপরে উল্লেখ করেছি, C-c C-eআসল বাফারগুলির পরিবর্তনগুলি "প্রতিফলিত" করার জন্য করুন। বাফারগুলি এখনও সংরক্ষিত হয়নি।

  • সমস্ত বাফার সংরক্ষণ করতে, আমি সাধারণত একবারে এটি ইম্যাক্স ডিফল্ট C-x s !বাইন্ডিং ব্যবহার করে করি ।

স্ক্রিনশট সহ ব্যবহারের একটি উদাহরণ এখানে দেওয়া হয়েছে:

এটা তোলে সমস্ত উদাহরণ প্রতিস্থাপন প্রক্রিয়া দেখায় bind-to-modi-mapকরতে bind-to-my-mapআমার মধ্যে ~/.emacs.d/

আমি যখন আমার bind-to-modi-mapইমাস সেটআপ ফোল্ডারে অনুসন্ধান করি তখন আমি নীচের 'অজানা ফলাফল:এজি ফলাফল, অপরিবর্তিত

এই বাফারটি কেবল পঠনযোগ্য।

এর পরে M-x wgrep-change-to-wgrep-mode, আমি হাইলাইট করেছি -modi-map, সেই নির্বাচনের সমস্ত উদাহরণ নির্বাচন করে M-x mc/mark-all-like-thisএবং সেগুলি থেকে নির্বাচনগুলি সম্পাদনা করার পরে -my-mapএটি নীচের মত দেখাচ্ছে: এজি ফলাফল, একাধিক-কার্সার ব্যবহার করে সংশোধিত

নীল হাইলাইটটি দেখায় যে আমি টিপলে কোন রেখাগুলি সংশোধন করা হবে C-c C-e

আঘাত করার সময় C-c C-e, আপনি এই স্ক্রিনশটের প্রকৃত ফাইলটিতে প্রতিবিম্বিত পরিবর্তনটি দেখতে পাবেন: সম্পাদনাগুলি শেষ করার পরে এজি ফলাফল

আমি তখন সমস্ত পরিবর্তিত ফাইল ব্যবহার করে সংরক্ষণ করব C-x s !


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

13

আমি যা করতে চাই তা হয় তাড়াতাড়ি বিদ্যমান গ্রেপ আউটপুট থেকে দ্রুত একটি ডায়ার্ড বাফার তৈরি করা [...], বা বহু-ঘটনার জন্য গ্রেফ আউটপুটটিকে বাফার তালিকায় রূপান্তর করা [...]।

গ্রেপ ফলাফলের বাফারকে আপনাকে কোনও কিছুর মধ্যে রূপান্তর করতে হবে না, গ্রাপ আউটপুট সম্পাদনা করার জন্য ইতিমধ্যে একটি মোড রয়েছে (এবং অবশ্যই ফাইলগুলিতে পরিবর্তনগুলি প্রতিফলিত করছে)।

  1. মেলপা থেকে wgrep প্যাকেজ ইনস্টল করুন ।
  2. (require 'wgrep) আপনার init ফাইলের মধ্যে।
  3. একটি গ্রেপ অনুসন্ধান করার পরে, হিট C-c C-pএবং দূরে সম্পাদনা!
  4. এর সাথে আপনার সম্পাদনাগুলি সংরক্ষণ করুন C-c C-e

এটি এসি এবং এজি হিসাবেও কাজ করে।


2
আমি এটি (ag.el সহ) করি। একসাথে ম্যাগনারদের মাল্টিকার্সারের সম্পাদনা করা সহজ রিফ্যাক্টরিংগুলি সত্যই সহজ।
টম রেগনার

4

এই কার্যকারিতাটি অনুমান ( projectile-replace) এর মধ্যে বিদ্যমান । এটি এগ্রি / এসিসি / গিট গ্রেপ / গ্রেপ ব্যবহার করা হলে (সেই ক্রমে) উপস্থিতিগুলি খুঁজে পেতে এবং tags-query-replaceক্যোয়ারী-প্রতিস্থাপন কার্যকর করতে ব্যবহার করবে।


এটি ফাইন্ড-গ্রেপ-ডায়ার্ড হিসাবে একই সমস্যাগুলিতে ভুগছে। এটি বিদ্যমান গ্রেপ আউটপুট ব্যবহার করছে না। প্রক্ষেপণ-বহু-ঘটনার সাথে একই রকম সমস্যা রয়েছে। আমি ম্যাচের তালিকাগুলি দেখার পরে জিজ্ঞাসা প্রতিস্থাপনটি শুরু করতে পছন্দ করব এবং অন্তর্নিহিত অনুসন্ধানের পদ্ধতিটি পরিবর্তন করব না। যদিও এটি একটি বিকল্প কর্মপ্রবাহ।
24:54

আপনি যা শোনার বর্ণনা দিচ্ছেন তা টেক্সটটি প্রতিস্থাপন করার জন্য খুব দ্রুত ম্যাক্রো তৈরি করে এবং বারবার কল করে M-g n C-x e(অর্থাত্‍ next-errorঘটনাটিগুলি স্ক্রোল করার জন্য ব্যবহার করে) সহজেই সম্পন্ন করা যায় ।
shosti

1

আইসিকেলস ব্যবহার করে এখানে আরও একটি পন্থা দেওয়া হল ।

আপনার এ গিয়ে Emacs সালে *grep*আউটপুট বাফার, Cc, আঘাত `, যা (যে কার্বন কপি backquote থাকবে) লম্বমান মোড বাফারে আবদ্ধ হয় *grep*কমান্ড icicle-compilation-search। এটি আপনাকে যে কোনও অনুসন্ধান হিট ( grepহিট) চয়ন করুন যে কোনও ক্রমে দ্রুত নেভিগেট করতে দেয় ।

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

অনুসন্ধানের হিটগুলির মধ্যে নেভিগেট করার সময় আপনি সেগুলির যে কোনওটির চাহিদা অনুসারে প্রতিস্থাপন করতে পারেন - হয় পুরো হিট (লাইন) অথবা কেবলমাত্র বর্তমান অংশটি আপনার মিনিপুফার ইনপুটটির সাথে মিলে যায়।

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


0

আমি এই ব্যবহারটি ব্যবহার করেছি আমি লিখেছি xah_find.el

আমি এটি লিখেছি কারণ:

  • খাঁটি এলিস্প উইন্ডোজে গ্রিপ বা ইমাক্স থেকে অপারেটিং সিস্টেমের মধ্যে ইউনিকোড সংক্রমণ সম্পর্কে আর উদ্বেগের দরকার নেই। emacs গ্রেপ সমস্যা
  • আপনি যদি ভারী ইউনিকোড ব্যবহারকারী হন তবে ইউনিক্স সরঞ্জামগুলিতে কিছু আধা-বাগ রয়েছে। লিনাক্স ইউনিক সমস্যা
  • আমি প্রতি সপ্তাহে 5 কে ফাইলগুলিতে সন্ধান / প্রতিস্থাপন করি। আমি বছরের পর বছর ধরে ডায়ার্ড-ডু-ক্যোয়ারী-রিপ্লেসমেন্ট-রেজিপ এক্স ব্যবহার করছিলাম। আমি ইন্টারেক্টিভ প্রকৃতিটি সত্যই আমার সময়কে সজ্জিত করে দেখতে পেয়েছি, তবুও পরিবর্তনের ফলাফলগুলি পরীক্ষা করার দরকার নেই। সুতরাং, আমার সমাধানটি এখন ব্যাচ চালানো হয়েছে তবে একটি সুন্দর প্রতিবেদন রয়েছে যা আমি ফাইলটি লেখার বিকল্পের সাথে ফলাফলগুলি সন্ধান / প্রতিস্থাপনের ফলাফলটি স্ক্যান করতে পারি।

এই এলিস্প ব্যবহারটি সম্ভবত ইমাসে ইউনিক্স গ্রেপ কল করার চেয়ে 5 থেকে 10 গুণ কম ধীর, তবে আমার জন্য ঠিক আছে।

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