Загрузка файлов, соответствующих определенным критериям, в скрытые буферы в vim - PullRequest
2 голосов
/ 03 августа 2011

Я бы хотел сделать рефакторинг кода в vim. Я нашел следующий драгоценный камень, чтобы применить преобразования ко всем буферам.

:dobuf %s/match/replace/gc

Мой код размещен с корневым каталогом, имеющим каталог для зависимостей и каталог сборки. Я хочу загрузить все файлы .cc, .h и .proto из ./src ./include и ./tests. Но не из зависимостей и сборочных каталогов, в фоновые / скрытые буферы. Я хочу сделать это, чтобы выполнить рефакторинг с помощью команды выше.

Если кто-то знает более чистый способ выполнения сценария использования, пожалуйста, покажите его.

Примечание: Я знаю, что вы можете связать вместе find и sed, чтобы сделать это из оболочки , однако я предпочитаю делать это в vim, если это вообще возможно. Префикс / gc в шаблоне, который я представил выше, служит для подтверждения замен в каждом совпадении, мне нужна эта функциональность, так как часто я не хочу заменять определенные совпадения, решения find и sed слишком строгие и привередливые при попытке использовать мой вариант использования также легко уничтожить файлы при замене на месте.

Для справки используйте sed и найдите:

Список замен кандидатов:

find src include tests -name *.h -or -name *.cc -or -name *.proto| 
xargs sed -n 's/ListServices/list_services/p'

Выполнить замены:

`find src include tests -name *.h -or -name *.cc -or -name *.proto| 
xargs sed -i 's/ListServices/list_services`'

1 Ответ

4 голосов
/ 03 августа 2011

Вы можете использовать :argadd для добавления файлов, которые вам нужны, в список аргументов vim.Это загрузит их как неактивные буферы (вы можете увидеть их потом с :ls. В вашем случае это может выглядеть так:

argadd src/**/*.cc
argadd src/**/*.h
argadd src/**/*.proto

И так далее, для include и tests каталоги. Возможно, вы захотите сделать для этого команду или поэкспериментировать с шаблонами глобусов, чтобы сделать ее немного проще. После этого ваша команда должна работать, хотя я бы рекомендовал вместо нее запускать :argdo:

argdo %s/match/replace/gc

Это выполнит его только для тех буферов, которые вы явно указали, но не для тех, которые были открыты в тот момент. Проверьте :help argadd и :help argdo для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...