Есть несколько способов сделать это.
Внутри текущего каталога
Если вы хотите выполнить поиск / замену в дереве проекта, вы можете использовать список аргументов 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
флаг для подтверждения замен.