Есть несколько способов сделать это.
Внутри текущего каталога
Если вы хотите выполнить поиск / замену в дереве проекта, вы можете использовать список аргументов Vim .
Просто откройте Vim и затем используйте :argsкоманду для заполнения списка аргументов. Вы можете передать несколько имен файлов или даже глобусы.
Например, :args **/*.rbбудет рекурсивно искать в текущем каталоге файлы ruby. Обратите внимание, что это также похоже на открытие Vim с помощью vim **/*.rb. Вы даже можете использовать команду оболочки, 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флаг для подтверждения замен.