إلى أي مدى تأخذ أحلام "البحث عن الملفات" المثالية

هل تقوم غالبًا بإجراء بحث على الملفات النصية؟ أنا - كل يوم لأكثر من 25 عامًا.


مهامي مختلفة للغاية في التعقيد والنطاق.


أولاً ، كمبرمج ، بالطبع ، أحتاج إلى عمليات بحث في الرموز. هذه المهام بسيطة (مجموعات المجلدات والملفات صغيرة) وسريعة (تظهر النتائج على الفور تقريبًا).


ثانيًا ، بصفتي عامل ، يجب أن أبحث في مئات (أحيانًا آلاف) من المجلدات بين آلاف (أحيانًا مئات الآلاف) من الملفات. هذه مهام صعبة من حيث حجم النتائج ووقت تلقيها. عادةً ، لا تزال نتائج عمليات البحث هذه تتطلب المزيد من المعالجة اليدوية أو معالجة البرامج.


تتم جميع الأعمال على Windows.


سأخبرك إلى أين دفعتني الرغبة في الحصول على أداة مناسبة لمثل هذه المهام.


في البداية كان TextPad


لأكثر من 10 سنوات ، كان TextPad الأداة السهلة الرئيسية.
ثم (قبل وبعد عام 2000 بقليل) قام بعمل ممتاز.


البحث عن ملف يشبه هذا ( TextPad ، 2004)


TextPad_fif


انطباعات

(+) هناك عدد قليل من الإعدادات في مربع الحوار ، لذلك لا يحجب محتويات الملفات.
(+) علامة التبويب مع نتائج البحث لها سلوك خاص - Enter / DvKlik يسمح لك بفتح الجزء الموجود. وإلا ، فهذا نص عادي "في ذاكرة" المحرر.
(+) هناك إعداد File counts only للبحث ليس الأجزاء نفسها ، ولكن فقط عددهم في الملفات. هذا يسرع بشكل كبير البحث الأولي .
(-) هناك عدد قليل من الإعدادات وعدد قليل من الأوامر في مربع الحوار. حجم الشاشة ثابت.
(-) اللغة الفنية للتعبيرات العادية ، على سبيل المثال ، بدلاً من المقبولة الآن \w كان من الضروري كتابة [:word:] .
بشكل عام ، إنها ذات جودة عالية ، ولكنها متواضعة.




بكرات ومقارنات


أدت القيود المفروضة على TextPad وتجميدها إلى تجارب مستمرة للمحررين الآخرين.
الآن لا يمكنك تذكر كل من جرب ، ولكن من بينهم:


  • MS Visual Studio . وحش ثقيل.
  • كسوف وحش أيضا.
  • IntelliJ IDEA . ساحر. يتم تقديمه ويعمل كمقدم لأمثلة عن كيفية القيام بذلك بشكل ملائم .


    انطباعات

    لقد فقدت IDEA القديمة بالفعل. للمقارنة ، التنفيذ الحالي في PyCharm ، 2017.1.3
    Pycharm_fif
    (+) عدد لا يمكن تخيله من الإعدادات والأوضاع.
    (+) الاكتفاء الذاتي من الحوار: النتائج وكود المصدر وإحصاءات البحث مرئية.
    (-) لا توجد قيود على عمق البحث في المجلدات - إما واحدة أو كلها في وقت واحد.
    (-) لا (لا أعرف الطريق) ابحث في عدة مجلدات.
    (-) لا (لا أعرف الطريقة) إخراج النتائج بتنسيق النص.


    بشكل عام ، فهي قوية ، ولكنها ليست عالمية.




  • المفكرة ++ . لا أتذكر ما منعه من التبديل.
  • SublimeText3 ، 2013. أداة مخترق - عمل ممتاز ، حد أدنى من الأموال ، لكن الأمر يأخذ الكثير في الاعتبار .


    انطباعات

    Sublime_fif
    (+) ضوابط الحد الأدنى.
    (-) إعدادات مختلفة "أين تبحث" كلها في حقل واحد. من الضروري مراعاة تفاعلهم.
    (-) الحوار المرفق فقط.
    (+) تقع النتائج على الفور في علامة تبويب النص ، وهي مرئية.
    (-) نتائج التنسيق الثابت: المسار الكامل واسم الملف ، ثم الخطوط الموجودة فيه. من توطين الأجزاء التي تم العثور عليها لا يوجد سوى أرقام الأسطر.
    (+) هناك إعداد "سياق" ، بحيث تدخل الخطوط الموجودة مع الجيران في النتائج.






هناك مثل هذا الرجل


بناء على مبدأ "لا أداة مثالية؟ إنشاء" ، غير اتجاه الجهود.
بدأ في الانتباه إلى استجابة المطورين. وفي عام 2012 ، كنت محظوظًا مع SynWrite .


المطور الوحيد ، أليكسي Torgashin ، قبل معظم الأفكار ، وقدم بسرعة وكفاءة. وقت التنفيذ النموذجي هو يوم أو يومين. في المنتدى ، سألته عن النهاية ، ثم عن واحد آخر ، ثم حوالي عشرة ، وأكثر ... في مكان ما في العشرة الثالثة أدركت أن لدينا لقاء جيد .


من التقديم الخاص بي ، أحضر أليكسي بحث الملف إلى هذه الحالة ( SynWrite ، 2016)


الصورة


انطباعات

(+) هناك استخراج مجلد من الملف Current folder .
(+) يمكنك فرز الملفات حسب تاريخ التعديل.
(+) توجد قائمة بالمجموعات الجاهزة للبحث preset والوصول السريع إليها ( F3 ).
(-) الحوار مثقل للغاية ويشغل مساحة كبيرة.
(-) يتم عرض النتائج كشجرة تحكم في اللوحة السفلية. للحصول عليها في شكل نصي ، تحتاج إلى استدعاء الأمر من القائمة المحلية.




"ماذا تحتاج ، أكبر سنا؟"


مع SynWrite ، أصبح البحث أكثر ملاءمة. كما تعلم ، تأتي الشهية مع الأكل ، لذلك تضاعفت قائمة الرغبات. كان هذا مجرد موقف المطور ، أسميتي الذهبية ، تجاههم كان أكثر وأكثر أهمية - "البحر الأسود كان اسود . "


هذا ما أردت الحصول عليه


  1. تأكد من الحاجة إلى النتائج على الفور في شكل نصي (لمزيد من المعالجة).
  2. يجب أن تكون النتائج مكتفية ذاتيا! بحيث يمكن حفظها وإغلاقها وفتحها - وبقيت طازجة ، أي جاهزة للعمل.
  3. نحتاج إلى البحث في الملفات الموجودة على القرص وفي الملفات المفتوحة (المعدلة).
  4. يجب أن يكون الحوار في حل المشاكل البسيطة مضغوطاً. على وجه الخصوص ، يجب ألا تتداخل عناصر التحكم في "الاستبدالات" والإعدادات النادرة مع البحث العادي.
  5. تحتاج بالضرورة إلى خيار للنتائج جنبًا إلى جنب مع الصفوف المجاورة .
  6. وضع "الوصف الكامل لنتيجة واحدة في سطر واحد" ضروري (لمزيد من المعالجة).
  7. معلومات المساعدة حول كيفية ملء الحقول ليست مطلوبة في ملف خارجي أو صفحة سحابية ، ولكن هناك ، على سبيل المثال ، في تلميحات الأدوات.



افعلها بنفسك!


كنت محظوظا مرة أخرى. أنشأ أليكس محررًا جديدًا لـ CudaText وقام بربط Python API به.


أخيرًا ، يمكنك القيام بكل شيء كما تريد في شكل مكون إضافي في Python.


تم إصدار الإصدار الأول في مايو 2016.


الحد الأدنى من مجموعة الضوابط

لعبة FIFA-dlg-min


الحد الأقصى لمجموعة الضوابط

FIFA full-dlg
هذا ، بالطبع ، ليس أول فطيرة ، بل الرغبة "في حشر كل شيء فطيرة الحوار "واضح للعيان.


إليك ما أقوم بتقديمه الآن


cuda_fif


نفذت كل قائمة الرغبات من قائمة "ماذا تريد".


(1) يمكن رؤية النتائج إما داخل مربع الحوار ، أو إخراجها على الفور إلى ملف (إذا كان [x] Send ).


(2) النتائج تصف نفسها بنفسها. في النص


fif_rpt_info


معلومات كافية لمعرفة اسم الملف الكامل وموقع الجزء الذي تم العثور عليه.
1:21:6 تعني: سطر واحد ، 21 عمودًا ، طول القطعة 6.


البرنامج المساعد قادر على استخراج واستخدام هذه المعلومات.


(3) يوجد بحث في المستندات غير المحفوظة. للقيام بذلك ، يتم إدخال سطر خاص <Open Files> في حقل In folder (يعمل الاختصاران <Tabs> و <t> ).


(4) يمكنك إخفاء عناصر التحكم اللازمة لتحديد الملفات المستبعدة ، لإجراء الاستبدالات ، لعرض النتائج ورموز المصدر في مربع حوار.


ضوابط خفية

• مجموعة الحد الأدنى fif_min
• مجموعة الحد الأدنى والاستبدال fif_repl
• الحد الأدنى من مجموعة وتحديد الاستثناءات للملفات fif_excl


(7) في تلميحات الأدوات ، التوقيعات للحقول المملوءة بحرية لها تفسيرات


نصائح

fif_incl
fif_tip_fold
يتوفر المزيد من المعلومات عند استدعاء Alt+H
fif_help_tips


نفذت العديد من القطع المختلفة.


  • يمكن أن يكون عمق المغادرة صفرًا ( Only ) أو ممتلئًا ( +All ) أو من 1 ( +1 level ) إلى 5 ( +5 levels ).


  • نادرًا ما تظهر خيارات البحث المستخدمة في For search



fif_extra_fi


خيارات البحث المتقدم
 ** / ** . •      . •         / . ![fif_first](https://user-images.githubusercontent.com/7419630/42456464-b0448f20-839d-11e8-8876-435fdfead1ad.png) •   ,        (  ). 

  • إذا لم تظهر النتائج داخل مربع الحوار ( [x] Send ) ، فهناك معلمات إضافية لها

fif_extra_rp


معلمات النتيجة المتقدمة
 • `Report to` -    ,    ,        . • `Append` -   . • `Tree type` -      `<path><file><r:c:l><line>`,   `<><><><  >`  ,    (" "-6).      ![fif_help_tree](https://user-images.githubusercontent.com/7419630/42456892-a7d867c0-839e-11e8-87f2-2b9ce6b5c530.png) • `Align (r:c:l)` -     `<r:c:l>` ,   `<  >`    . : ![fif_align](https://user-images.githubusercontent.com/7419630/42616450-036e3ae6-85b7-11e8-861a-cf27a3a07c7a.png) • `Add context` -     (" "-5). 

  • يمكنك تذكر معلمات البحث - عمل إعدادات مسبقة . يتم تطبيق الإعدادات الخمسة الأولى من خلال Ctrl+1 (.. 5 ) ، والباقي - من القائمة أو مربع حوار Presets


    المسبقة الحوار

    fif_pset




  • يمكنك تذكر مكان / حجم مربع الحوار / عناصر التحكم - هل التخطيط. يتم تطبيق التخطيط الخمسة الأول بواسطة Alt+1 (.. 5 ) ، والباقي - من القائمة.


  • يمكن إجراء كل شيء تقريبًا في الحوار بدون ماوس . لهذا هناك


    مفاتيح الاختصار

    مفاتيح الفيفا




  • للفرق هناك


    القائمة

    إن زر الهامبرغر هو "=" فقط مع تسطير ، لذا فهو متاح من خلال Alt+= .
    fif_menu_find




  • تنقسم عملية البحث إلى ثلاث مراحل متتالية:
    • يتم إنشاء مجموعة من الملفات المناسبة ،
    • يتم استخراج الأجزاء من الملفات ،
    • يتم تعبئة تقرير عن النتائج.
    يتم عرض معلومات حول كل مرحلة وتغييرها في التحكم في الحالة.
    يتيح لك Esc مقاطعة المرحلة الحالية فقط والانتقال إلى المرحلة التالية باستخدام البيانات المتراكمة.


  • بالإضافة إلى المعلمات العادية المعرفة من قبل المستخدم ، هناك العديد من الخيارات نادرًا ما يتم تغييرها. الآن هناك 19 منهم ولهم حوار منفصل


    مربع حوار الخيارات

    fif_opts
    على سبيل المثال ، من بين الخيارات هناك مثل:
    • استخدم النص المحدد لملء حقل Find what عند فتح مربع الحوار.
    • يقطع جميع مراحل البحث بواحد ESC .
    • أغلق مربع الحوار عند البحث وإخراج النتائج إلى ملف.
    • طي النتائج السابقة عند إضافة نتائج جديدة إلى نفس الملف.
    • حفظ جميع معلمات البحث في الصف الأول من النتائج. يتيح لك ذلك تحميلها لاحقًا في مربع الحوار.
    • تخطي الملفات الأكبر من الحجم المحدد.
    • تعيين نمط الأجزاء التي تم العثور عليها. الألوان المتاحة / الجرأة / الميل للنص ولون الخلفية ونمط الإطار على كل جانب. في الصور أعلاه ، تم تعيين نمط "إطار به نقاط أسفل الجزء".




  • تعمل بعض أوامر المكوّن الإضافي قبل الحوار وبعده.

cuda_menu


من قائمة CudaText الرئيسية
 • `Find in *` -        . • `Navigate to *` -     ,    ,   . • `Jump to *` -   /    ,     ,     . • `Configure *` -        ,       ![fif_dclk](https://user-images.githubusercontent.com/7419630/42460070-aa1c5f26-83a5-11e8-9103-11f676dcf08a.png) 



CudaText و Python


بضع كلمات حول النظام الأساسي الذي نما عليه المكون الإضافي.


أليكسي Torgashin جعل SynWrite في دلفي. تم ترخيص نصف رموز هذا المحرر من مطور آخر ، وهذا منع تنفيذ الأفكار الجديدة. وتدفع دلفي. وبسبب هذا ، تحول أليكس إلى Free Pascal و IDE Lazarus ، ونفذ الأجزاء المفقودة بمفرده وأنشأ CudaText في عام 2015 ، وتجمد SynWrite. تم استخدام فرصة البدء من الصفر بشكل معقول - حيث قام بالعديد من التحسينات القوية في التصميم.


  1. بدأت تتراكب الإعدادات في طبقات: افتراضي ، عام ، قانون ، ملف حالي . بدأ تخزينها في json ، ولكن ليس ini . أصبح تغيير الإعدادات هو تحرير النص المعتاد بتنسيق json .
  2. تخلصت النواة من عدد كبير من الخدمات غير الحرجة. على وجه الخصوص ، من عمليات البحث عن الملفات ، وحدات الماكرو ، استدعاء المرافق الخارجية ، أداة تكوين القائمة ، القصاصات ، الأنواع ، المفضلة ، إلخ.
  3. لإنشاء مثل هذه الخدمات ، توفر النواة واجهة برمجة تطبيقات Python ، والتي تتضمن مكتبة واجهة المستخدم الرسومية. الآن نفذت الإضافات جميع الخدمات السابقة وأضافت الكثير من الخدمات الجديدة.
  4. بالإضافة إلى ذلك ، أصبح النواة نفسها متعددة الوحدات. هناك مكونات للعلامات والإشارات المرجعية وسمات الأقواس وما إلى ذلك.

يظهر تأثير Sublime Text بوضوح هنا. على حد علمي ، لا يخفي أليكسي أنه يأخذ في الاعتبار الأفكار من Sublime ومكوناته الإضافية. كما أنه يلقي نظرة سريعة على Atom و Brackets.


لقد تبين أنها جيدة في حد ذاتها ، ولكن بالنظر إلى الإنتاجية العالية والاستجابة من أليكسي ، فقد كانت ممتازة. لشرح نوع الإنتاجية والاستجابة التي نتحدث عنها ، سأقدم بعض الحقائق:


  • تم إنشاء Alexei: lexers - 201، linter - 34، snippet-sets - 12، plug-ins - 93.
  • منذ أكتوبر 2015 ، كان هناك أكثر من 1200 رغبة (لا شكاوى) في GitHub ، أكثر من 90 ٪ راضون.

CudaText مجاني ، مفتوح المصدر ، هناك تجميعات لـ Win / Linux / Mac / BSD. أنا شخصياً أستخدم الإصدار Win فقط ، لكني أرى رغبات وشكاوى المستخدمين مع Linux و Mac. على نفس لعازر ، بالمناسبة ، مكتوب القائد الكلي .


من المثير للاهتمام مقارنة APIs Python لـ Sublime و CudaText . إنها مختلفة تمامًا.


• يحتوي Sublime على نمط كائن من نوع DOM.


• يحتوي CudaText على أسلوب إجرائي مثل API OS ، على سبيل المثال ، WIN32.


يبدو أن هذا الاختلاف يأتي من لغات التنفيذ. إذا تم تنفيذ المحرر نفسه في Python ، فإن نمط DOM لواجهة برمجة التطبيقات أمر طبيعي بالنسبة إليه - يمكنك تخزين الروابط إلى الكائنات. وإذا كان المحرر في Pascal ، فلا يمكن تخزينه إلا بواسطة معالجات.


• لا تحتوي واجهة برمجة التطبيقات Sublime على واجهة مستخدم رسومية. يبدو أن المكوّن الإضافي يمكن أن يستخدم واجهة المستخدم الرسومية Python (Tk؟ WxPython؟ Qt؟) ، لكن النمط سيتباين مع Sublime.


• يوفر CudaText لمكونات GUI في النمط العام للتطبيق. أولاً ، هناك ترسانة غنية من عناصر التحكم الأساسية: checklistbox و listview و checklistview و treeview وبالطبع الأزرار العادية والشيكات والمحررات الفردية والمتعددة الأسطر ومربعات التحرير والسرد وما إلى ذلك. ثانيًا ، هناك إمكانية لتضمين مكونات CudaText في واجهة المستخدم الرسومية. في الصور أعلاه ، يتم التحكم في الحالة وقائمة محلية وعناصر تحكم محرر بالنتائج / المصدر. مثل هذا التكامل مع واجهة المستخدم الرسومية Python النقية غير ممكن على الإطلاق.


والعيش بدون واجهة المستخدم الرسومية

نظرًا لأنني أنشأت بالفعل عشرات المكونات الإضافية لـ CudaText ، ومعظمها تم التواصل مع المستخدم من خلال مربعات الحوار ، أصبح من الصعب للغاية بالنسبة لي الآن أن أتخيل كيف يمكن إنشاء المكونات الإضافية بدون هذه الثروة . بالطبع ، إذا كان المكون الإضافي يحتوي على مربع حوار واحد فقط يسمح لك بتحديد الإعدادات ، فإن تحرير json يعطي json مناسبًا. ولكن يتم تنفيذ هذا التعديل "قبل إطلاق" المكون الإضافي ؛ لا يمكن أن يساعد إذا كانت هناك حاجة إلى رد فعل مستخدم وقت التشغيل المباشر.




هل هناك حد؟


أتذكر مرة كل شهرين إلى ثلاثة أشهر ، وهذا يستمر ، على ما أذكر ، منذ عامين ونصف بالفعل ، يبدو لي أن "هذا هو النهائي" - يلعق الحوار ، وتظهر النتائج بكل الطرق ، وهناك جميع الأوامر المفيدة. ولكن نظرًا لأن هذه الأداة قيد الاستخدام باستمرار ، نظرًا لأنه يتم استخدام جميع ميزاتها تقريبًا ، بينما تنقر العقارب على البحث التالي أو تدرس النتائج التالية ، فإن الرأس يبحث عن تحسينات جديدة. ويجد!


لديك أفكار جديدة

على سبيل المثال ، أثناء كتابة هذا المنشور ، ولد ما يلي:
• يمكنك تحديد نص في نتائج أو عناصر تحكم المصدر وإعطاء أمر للبحث عنه.
• يمكنك اعتراض أحداث "الملف المفتوح" مع النتائج واستعادة نمط الأجزاء التي تم العثور عليها.


بالإضافة إلى ذلك ، أنا مهتم بفهم ما إذا كان العقل الجماعي يمكن أن يقترح تحركات جديدة في هذه اللعبة . لذلك ، أختتم بسؤال لزملائي المبرمجين:
ماذا يمكن إضافته إلى "البحث عن الملفات" داخل محرر النصوص؟




التفاصيل الفنية لتنفيذ البرنامج المساعد ل CudaText

• اللغة: Python 3.5
• مكتبة واجهة المستخدم الرسومية: CudaText API
• المطورين: أندريه كفيتشانسكي
• حجم الكود:> 300 كيلو بايت
• عدد ToDo للمكون الإضافي:> 250
• رقم الخطأ / الرغبة في واجهة برمجة تطبيقات CudaText:> 150
• منتدى البرنامج المساعد: قضايا جيثب


كيف تحاول

• قم بتنزيل تجميع CudaText لنظام التشغيل الخاص بك ، قم بفك الضغط أو التثبيت.
• قم بتشغيل CudaText واستدعي أمر القائمة Plugins/Addons Manager/Install...
• أدخل "بحث" بحيث يترك المرشح FindInFile فقط للتثبيت (قد يكون من الضروري إعادة استدعاء CudaText ، وليس من الضروري على Win).
• استدعاء أمر القائمة Plugins/Find in Files/Find in files...

Source: https://habr.com/ru/post/ar417367/


All Articles