চিহ্নিত ডিরেক্টরিগুলিতে পুনরায় ক্রমযুক্ত ফাইলগুলি রিগ্রেসিভ খুলুন


9

সাধারণভাবে বলতে গেলে, আমি প্রদত্ত ডিরেক্টরিগুলির (এবং তাদের সাব-ডিরেক্টরিগুলি) যেখানে ফাইলের নাম একটি প্রদত্ত রেজিএক্সপ্যাকের সাথে মেলে সেখানে সমস্ত ফাইল খুলতে সক্ষম হতে চাই।

উদাহরণ স্বরূপ

  /home/nispio/project:
  total used in directory 1612 available 1000000000
  drwxrwxr-x 13 nispio group    4096 Sep 19 14:06 .
  drwxrwxr-x  7 nispio group    4096 Sep 22 16:41 ..
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 cfg
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 hlp
* drwxrwxr-x  2 nispio group    4096 Sep 23 16:52 hst
* drwxrwxr-x  2 nispio group    4096 Sep 29 14:52 inc
* drwxrwxr-x  2 nispio group    4096 Oct  1 12:53 lib
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 mcr
  drwxrwxr-x  2 nispio group    4096 Sep 24 10:50 pyl
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 snr
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 unix

আমি ডিরেক্টরি চিহ্নিত করেছেন hst, incএবং lib, এবং এখন আমি এক্সটেনশনগুলি সহ সমস্ত ফাইল যেতে ইচ্ছুক .c, .ccএবং .hযারা তিন ডিরেক্টরি এবং তাদের সাবডিরেক্টরি মধ্যে।

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

এই একই জিনিসটি করতে helmবা dired+অন্য কোনও এক্সটেনশান ব্যবহার করে পরামর্শের জন্য আমি উন্মুক্ত, যা আমার ফাইল সিস্টেমটিকে আরও সহজে নেভিগেট করতে দেয়।


ম্যাথিয়াস বা ড্রু আপনার অনুসন্ধানের উত্তর দিয়েছে? নাকি আপনি আলাদা কিছু খুঁজছিলেন?
মালবারবা

উত্তর:


14

এটা চেষ্টা কর:

C-u C-x d

এটি আপনাকে কীভাবে ফাইল তালিকাভুক্ত করা উচিত তার যুক্তিগুলি প্রবেশ করান। ডিফল্টরূপে এটি -alপ্রম্পটে বলে। এতে যোগ করুন R, শেষ পর্যন্ত -alR। প্রকার RET

একটি ডিরেক্টরি নির্বাচন করুন / টাইপ করুন এবং তারপরে টিপুন RET

এটি আপনার নির্বাচিত এবং নীচে থেকে সমস্ত ডিরেক্টরি পুনরাবৃত্তভাবে খুলবে।

এখান থেকে, % mনির্দিষ্ট ফাইলের নামের প্যাটার্নের সাথে মিলিয়ে সমস্ত ফাইল চিহ্নিত করতে টাইপ করুন। আমি প্রায়শই তারপরে টাইপ করি tএবং তারপরে kআমি আগ্রহী নই এমন সমস্ত ফাইল হত্যা (গোপন) tকরতে। সমস্ত ফাইল চিহ্নিত করতে আবার টাইপ করি ।

প্রকৃতপক্ষে ফাইলগুলি খোলার ক্ষেত্রে, এটি করার কোনও মানক উপায় আছে বলে আমি মনে করি না, তবে এটি করার জন্য আপনি সহজেই একটি নতুন কমান্ড সংজ্ঞায়িত করতে পারেন (এটি আপনার .emacsফাইলে রাখুন):

(defun dired-find-marked-files ()
 (interactive)
 (dolist (f (dired-get-marked-files)) 
  (find-file f)))

সম্ভবত কেউ এটিকে ইতিমধ্যে কিছু সুন্দর ডায়ার্ড বর্ধিত প্যাকেজে অন্তর্ভুক্ত করেছে তবে এটি নিজে নিজেই করা মজাদার;)

উপভোগ করুন!


7

আপনি হেলম-প্রজেস্টাইল-ফাইন্ড-ফাইলের সাহায্যে এটি সহজেই করতে পারেন । যেহেতু প্রজেক্টাইল প্রতিটি ফাইলকে তার আপেক্ষিক পাথ দিয়ে ট্র্যাক করে রাখে, আপনি সহজেই যেকোনো কিছুতে সংকীর্ণ হতে পারেন। আসুন আপনার উদাহরণ ব্যবহার করুন। আপনার ক্ষেত্রে, আপনাকে ফাইল খুলুন করতে চান hst, incএবং lib। আপনি এই ডিরেক্টরিটি সম্পর্কিত সমস্ত ফাইল দুটি উপায়ে পুনরুদ্ধার করতে পারেন:

  • হেলম প্রম্পটে helm-projectile-find-fileপ্রতিটি ডিরেক্টরি লিখুন এবং সেই ডিরেক্টরিতে সংকীর্ণ ফাইল চিহ্নিত করুন। উদাহরণস্বরূপ, প্রথমে আমি প্রবেশ করি ^hst/(যা hst/প্রতিটি প্রার্থীর শুরুতে থাকা সমস্ত ফাইলের সংকীর্ণ হয় )। সমস্তM-a দুটি ফাইল দিয়ে চিহ্নিত করুন , অন্য দুটি ডিরেক্টরিতে ফাইলগুলির জন্য অনুরূপ কিছু করুন।

  • অথবা, আপনি করতে পারেন এই প্যাটার্ন ব্যবহার সব ডিরেক্টরিগুলি থেকে ফাইলগুলিকে উদ্ধার : ^hst/\|^inc\|^lib। হেলম সর্বোপরি রেজেক্স গ্রহণ করে। রেজেক্স \|মানে or। আপনি যদি একসাথে সব কিছু নির্বাচন করতে চান তবে এটি করুন।

এর যে কোনও একটি দিয়ে আপনি খুলতে চান এমন সমস্ত ফাইল চিহ্নিত করেছেন। তারপরে RETএগুলি সব খুলতে টিপুন ।

দয়া করে নোট করুন যে আপনার যদি সেই ডিরেক্টরিগুলিতে প্রচুর ফাইল থাকে তবে আপনার বাড়ানো দরকার helm-candidate-number-limit। অন্যথায় একবার প্রার্থীর সংখ্যা সীমাতে চলে যায়, আর কোনও প্রার্থী প্রদর্শিত হবে না এবং আপনি অদৃশ্য প্রার্থীদের নির্বাচন করতে পারবেন না। এটি উচ্চতর সংখ্যায় সেট করুন বা nilআপনি এই সীমাটি না চাইলে সেট করুন ।

হেলমের সাথে ভাল জিনিস হ'ল আপনি ইন্টারেক্টিভ ফাইলগুলি নির্বাচন করতে পারেন।


আমি মনে করি তিনি সেগুলি একবারে খুলতে চান, তাদের মধ্যে একটিও নির্বাচন করবেন না।
মালবারবা

1
@ মালবারবা আপনি একাধিক ফাইল M-aব্যবহার করে নির্বাচন করতে পারেন helm-projectile-find-fileএবং আমার তালিকাভুক্ত পদ্ধতিটি ব্যবহার করে একবারে আরইটি টিপুন।
টু

অবশ্যই! দুঃখিত, বাক্যটি মিস করেছেন। আমি এটিকে আমার মতো বোকামির কাছে আরও কিছুটা সুস্পষ্ট করার জন্য সম্পাদনা করেছি। আপনার পছন্দ না হলে বা আমি কিছু ভুল করেছি যদি নির্দ্বিধায় রোলব্যাক করুন।
মালবারবা

@ মালবারবা ধন্যবাদ এটি এখন আরও পরিষ্কার।
তু

4

এখানে দুটি সম্ভাবনা রয়েছে (বিকল্প):

  1. ডায়ার্ডে আপনি যে ফাইলগুলিতে অভিনয় করতে চান সেগুলিকে অন্তর্ভুক্ত করতে পারেন, অন্তর্ভুক্ত lsসুইচগুলি -Rব্যবহার করে অথবা iনির্দিষ্ট সাবডির অন্তর্ভুক্ত করে । আপনি গ্রন্থাগার ব্যবহার করেন তাহলে Dired + + তারপর আপনি ব্যবহার করতে পারেন * .(বাধ্য diredp-mark/unmark-extension, (যেমন একটি প্রদত্ত এক্সটেনশন আছে তালিকাভুক্ত সব ফাইল চিহ্নিত করতে .h)। তারপর আপনি ব্যবহার করতে পারেন F(বাধ্য dired-do-find-marked-filesহিসাবে চিহ্নিত সব ফাইল খোলার জন্য)।

  2. লাইব্রেরী ডায়ার্ড + এর সাহায্যে আপনি চিহ্নিত চিহ্নিত সাবডাইরেক্টরিগুলিতে চিহ্নিত সমস্ত ফাইল এবং চিহ্নিত ফাইলগুলির সমস্তগুলিতে পুনরাবৃত্তভাবে সংজ্ঞায়িত, আইডাব্লু, সাবডিয়ার্স, তাদের সাবডিয়ারস ইত্যাদির উপর কাজ করতে পারেন etc.

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

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

    যাইহোক, যদি আপনি লাইব্রেরি ব্যবহার icicles একসাথে Dired + + তারপর আপনি ব্যবহার করতে পারেন M-+ C-F, অর্থাত্, M-+ C-S-f(যা আবদ্ধ হয় icicle-visit-marked-file-of-content-recursive), কোন বা ফাইল মাত্র বর্ণিত সব খুলতে (অর্থাত, সেই হিসাবে চিহ্নিত বা চিহ্নিত subdirs এ, যাও recursively সংজ্ঞায়িত)।

    আপনি ফাইলের নামগুলি (এবং / অথবা ফাইলের বিষয়বস্তু) ফিল্টার করতে ফ্লাইতে রিজেক্সপস ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি আপনি, আপনাকে অনুরোধ হিসাবে, আছে এক্সটেনশন ফাইল সব খুলতে পারে .c, .ccএবং .hহিসাবে চিহ্নিত subdirs মধ্যে (চিহ্নিত subdirs সঙ্গে একই ভাবে পরিচালিত হচ্ছে, যাও recursively)।


3

এসেল জেডএস-স্টাইলের গ্লোব **/*সম্প্রসারণ পরিচালনা করে , সুতরাং একটি পদ্ধতির মধ্যে রয়েছে এসেক্সেলকে সঠিক ডিরেক্টরিতে চালিত করা এবং চালানো isfor f in **/*cc **/*h { find-file $f}

বিকল্পভাবে, find-fileযখন এলিসপ থেকে কল করা হয় তখন ফাংশনটি ওয়াইল্ডকার্ড সমর্থন করে। তার জন্য ডকুমেন্টেশন থেকে এখানে একটি দরকারী স্নিপেট রয়েছে find-file:

(find-file FILENAME &optional WILDCARDS)
Interactively, or if WILDCARDS is non-nil in a call from Lisp, expand wildcards (if any) and visit multiple files.

আমি কীভাবে zsh- স্টাইলের গ্লোববিংয়ের সাথে এটি কাজ করব তা বুঝতে পারি না, তবে এটি একটি ভাল বিকল্প হতে পারে।

যদি এই সমস্ত ফাইল একক উত্স নিয়ন্ত্রিত প্রকল্পে থাকে তবে অনুমানটি একটি আলাদা এবং আরও ভাল পদ্ধতির হতে পারে।

পুনশ্চ. আপনি যদি ইহেল দিয়ে যান তবে আমি eshell-toggle-cdএকটি কী বাঁধাই করার পরামর্শ দেব যাতে আপনি যে বাফারটি সম্পাদনা করছেন তার ডিরেক্টরিতে সহজেই একটি এসেল প্রম্পট পপআপ করা যায়।


আমি মনে করি না যে এটি find-fileপুনরাবৃত্তির সাথে পরিচালিত হবে, এটিই আমার প্রধান বৈশিষ্ট্য after শেল খোলা এবং কমান্ড টাইপ করা অনেক বেশি কাজের মতো মনে হয়, কারণ (আমি অনুমান করছি) আমার কমান্ডটি এমন কিছু হতে হবে for d in inc src hst { for f in $d/**/*cc $d/**/*c $d/**/*h { find-file $f } }বা এটি এর চেয়ে সহজ?
নিসপিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.