Існує кілька способів зробити це.
Всередині поточного каталогу
Якщо ви хочете виконати пошук / заміну в дереві проекту, ви можете скористатися списком аргументів 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
прапор для підтвердження заміни.