gpt4 book ai didi

c++ - 将满足特定条件的文件加载到 vim 中的隐藏缓冲区中

转载 作者:搜寻专家 更新时间:2023-10-31 01:18:37 24 4
gpt4 key购买 nike

我想在 vim 中做一些代码重构。我发现以下 gem 可将转换应用于所有缓冲区。

:dobuf %s/match/replace/gc

我的代码在根目录中有一个依赖项目录和一个构建目录。我想从 ./src ./include 和 ./tests 加载所有 .cc 、 .h 和 .proto 文件。但不是从依赖项和构建目录进入后台/隐藏缓冲区。我想这样做是为了使用上面的命令进行重构。

如果有人知道执行用例的更简洁的方法,请展示它。

备注:I know you can string together find and sed to do this from the shell ,但是如果可能的话,我更喜欢在 vim 中进行。我上面介绍的模式中的/gc 前缀用于确认每个匹配项的替换,我经常需要此功能,因为我不想替换某些匹配项, findsed 解决方案在尝试我的用例时过于严格和挑剔,在进行就地替换时也很容易破坏文件。

引用使用 sed 和 find:

列出候选替换:

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`'

最佳答案

你可以使用 :argadd 将你需要的文件添加到 vim 的参数列表中。这会将它们加载为非事件缓冲区(之后您可以使用 :ls 查看它们。在您的情况下,它可能看起来像这样:

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

以此类推,对于 includetests 目录。您可能想为此创建一个命令或尝试使用 glob 模式以使其更简单一些。之后,您的命令应该可以运行,尽管我建议您改用 :argdo 运行它:

argdo %s/match/replace/gc

这只会对您明确指定的缓冲区执行它,不会对您当时可能打开的任何其他缓冲区执行。检查 :help argadd:help argdo 以获得更多信息。

关于c++ - 将满足特定条件的文件加载到 vim 中的隐藏缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com