Існує кілька способів зробити це.
Всередині поточного каталогу
Якщо ви хочете виконати пошук / заміну в дереві проекту, ви можете скористатися списком аргументів Vim .
Просто відкрийте Vim та використовуйте :argsкоманду для заповнення списку аргументів. Ви можете передавати кілька файлів і навіть глобуси.
Наприклад, :args **/*.rbрекурсивно шукатимуть у поточному каталозі рубінові файли. Зауважте, що це також як відкриття Vim з vim **/*.rb. Ви навіть можете скористатися командою shell, findщоб отримати список усіх файлів у поточному каталозі, запустивши:
:args `find . -type f`
Ви можете переглянути поточний список аргументів, запустивши :argsйого сам. Якщо ви хочете додати або видалити файли зі списку, ви можете використовувати відповідно команди :argaddабо :argdelete.
Коли ви задоволені списком, тепер ви можете використовувати потужну :argdoкоманду Vim, яка виконує команду для кожного файлу зі списку аргументів::argdo %s/search/replace/g
Ось кілька порад щодо пошуку (на основі деяких коментарів):
- Використовуйте межу слова, якщо ви хочете шукати "foo", але не "foo_bar". Використовуйте
\<та \>конструюйте навколо структури пошуку так::argdo %s/\<search\>/foobar/g
- Використовуйте
/cпрапор пошуку, якщо ви хочете, щоб Vim запитав підтвердження перед заміною пошукового терміну.
- Використовуйте
/eпрапор пошуку, якщо ви хочете пропустити помилки "шаблон не знайдено".
- Ви також можете зберегти файл після виконання пошуку:
:argdo %s/search/replace/g | update. Тут :updateвикористовується, оскільки збереже файл лише у тому випадку, якщо він змінився.
Відкрити буфери
Якщо у вас вже відкриті буфери, ви хочете виконати пошук / заміну, ви можете використовувати :bufdoкоманду, яка виконує команду для кожного файлу у вашому списку буферів ( :ls).
Команда дуже схожа на :argdo: :bufdo %s/search/replace/g
Подібне до :argdoта :bufdo, є :windoі :tabdoте, що діє на вікна та вкладки відповідно. Вони рідше використовуються, але все ж корисно знати.
/cпрапор для підтвердження заміни.