كيفية البحث والاستبدال عبر ملفات متعددة في Vim

في هذه المقالة ، ستتعلم كيفية البحث والاستبدال بشكل تفاعلي عبر العديد من الملفات بأمرين فقط ، وذلك بفضل Vim.

بينما توجد العديد من الطرق للبحث عن الكلمات واستبدالها في ملف واحد ، ماذا تفعل عندما يكون لديك سلسلة لتحديثها عبر ملفات متعددة غير مرتبطة ، وكلها بأسماء مختلفة؟ أنت تسخر قوة أدوات سطر الأوامر ، بالطبع!

أولاً ، ستحتاج إلى findجميع الملفات التي تريد تغييرها. إن تجميع ما هو فعال لاستعلامات البحث عنه findهو في الحقيقة مقيد فقط بخيالك.

إليك مثال بسيط يبحث عن ملفات Python:

find . -name '*.py' 

و -nameبحث اختبار لنموذج، مثل جميع الملفات التي تنتهي في .py. ولكن findيمكنه فعل الكثير مع ظروف الاختبار الأخرى ، بما في ذلك -regexالاختبارات. اركض find --helpلترى العديد من الخيارات.

قم بضبط البحث باستخدام grepللحصول على الملفات التي تحتوي على السلسلة التي تريد تغييرها فقط ، مثل إضافة:

grep -le '\' 

و -lالخيار يتيح لك فقط أسماء الملفات لجميع الملفات التي تحتوي على نمط (الرمز مع -e) تلك المباراة "حوت".

يمكنك أيضًا استخدام Vim's المثير للإعجاب :bufdoوالذي يتيح لك تشغيل نفس الأمر عبر مخازن مؤقتة متعددة. إنه يعمل بشكل تفاعلي مع كل هذه الملفات دون ملل من فتح وحفظ وإغلاق كل ملف ، واحدًا تلو الآخر.

لنقم بتوصيل نتائج find+ القوية grepفي Vim بـ:

vim `find . -name '*.py' \ -exec grep -le '\' {} \;` 

يؤدي استخدام توسع backtick لتمرير بحثنا إلى Vim إلى فتح العديد من المخازن المؤقتة جاهزة للعمل. (افعل :h backtick-expansionفي Vim للمزيد.)

يمكنك الآن تطبيق أمر Vim :bufdoعلى كل هذه الملفات وتنفيذ إجراءات مثل البحث التفاعلي والاستبدال:

:bufdo %s/a whale/a bowl of petunias/gce 

و gل "العالمية" سيغير تواجدات نمط على جميع الخطوط. و eسوف تجاهل الأخطاء إذا لم يتم العثور على النمط. و cالخيار يجعل هذا التفاعل. إذا كنت تشعر بالثقة ، يمكنك حذفها لإجراء التغييرات دون مراجعة كل واحدة.

عندما تنتهي من استعراض جميع المخازن المؤقتة ، احفظ كل العمل الذي أكملته باستخدام:

:bufdo wq! 

ثم تشمس في مجد الوقت والجهد الذي وفرته.