كيفية البحث والاستبدال عبر ملفات متعددة في 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!
ثم تشمس في مجد الوقت والجهد الذي وفرته.