将符合特定条件的文件加载到vim中的隐藏缓冲区中

Loading files that meet certain criteria into hidden buffers in vim

本文关键字:vim 隐藏 缓冲区 文件 特定条件 加载      更新时间:2023-10-16

我想在vim中做一些代码重构。我找到了下面的gem来将转换应用到所有缓冲区。

:dobuf %s/match/replace/gc

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

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

注意:我知道你可以把findsed串在一起从shell中做到这一点,但是我更喜欢在vim中这样做,如果可能的话。我上面提供的模式中的/gc前缀用于确认每个匹配的替换,我需要这个功能,因为我经常不想替换某些匹配,findsed解决方案在尝试我的用例时过于严格和挑剔,在进行就地替换时也很容易破坏文件。

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

您可以使用:argadd将所需的文件添加到vim的参数列表中。这将把它们加载为非活动缓冲区(您可以随后使用:ls看到它们)。在您的示例中,它可能看起来像这样:

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

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

argdo %s/match/replace/gc

这将只对您显式指定的缓冲区执行它,而不是对您当时可能打开的任何其他缓冲区执行它。查看:help argadd:help argdo获取更多信息