【问题标题】:Loading files that meet certain criteria into hidden buffers in vim将满足特定条件的文件加载到 vim 中的隐藏缓冲区中
【发布时间】:2011-08-03 13:13:34
【问题描述】:

我想在 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 前缀用于确认每次匹配的替换,我需要这个功能,因为我经常不想替换某些匹配,findsedsolution 过于严格和挑剔在尝试我的用例时,在进行就地替换时也很容易破坏文件。

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

【问题讨论】:

  • (OT) 抱歉打扰:你能重新打开stackoverflow.com/questions/7568983/…吗?我有一个我认为有价值的回复...如果您认为该回复没有增加 SO 的价值,您仍然可以删除该问题。

标签: c++ vim refactoring


【解决方案1】:

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

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

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

argdo %s/match/replace/gc

这只会为您明确指定的缓冲区执行它,而不是您当时可能打开的任何其他缓冲区。查看:help argadd:help argdo 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多