Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将满足特定条件的文件加载到vim中的隐藏缓冲区中_C++_Vim_Refactoring - Fatal编程技术网

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

C++ 将满足特定条件的文件加载到vim中的隐藏缓冲区中,c++,vim,refactoring,C++,Vim,Refactoring,我想在vim中进行一些代码重构。我发现以下gem可以将转换应用于所有缓冲区 :dobuf%s/match/replace/gc 我的代码以根目录的形式展开,根目录有一个用于依赖项的目录和一个构建目录。我想从./src./include和./tests加载所有.cc、.h和.proto文件。但不是从依赖项和构建目录,而是从后台/隐藏缓冲区。我想使用上面的命令进行重构 如果有人知道一种更干净的方法来执行用例,请展示它 注意:不过,如果可能的话,我更喜欢在vim中执行。我上面介绍的模式中的/gc前缀用

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

:dobuf%s/match/replace/gc

我的代码以根目录的形式展开,根目录有一个用于依赖项的目录和一个构建目录。我想从./src./include和./tests加载所有.cc、.h和.proto文件。但不是从依赖项和构建目录,而是从后台/隐藏缓冲区。我想使用上面的命令进行重构

如果有人知道一种更干净的方法来执行用例,请展示它

注意:不过,如果可能的话,我更喜欢在vim中执行。我上面介绍的模式中的/gc前缀用于确认每个匹配的替换,我需要此功能,因为我通常不想替换某些匹配,
find
sed
解决方案在尝试我的用例时限制太多,太挑剔,在进行就地替换时,销毁文件也很容易

使用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`'
执行替换:

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
依此类推,对于
include
tests
目录。您可能希望为此创建一个命令,或者尝试使用glob模式使其更简单。之后,您的命令应该可以工作,不过我建议改为使用
:argdo
运行它:

argdo %s/match/replace/gc
这将仅对您明确指定的缓冲区执行,而不会对您当时可能已打开的任何其他缓冲区执行。有关详细信息,请检查
:help argadd
:help argdo

(OT)抱歉打扰了:你能重新打开吗?我有一个我认为很有价值的回复…如果你认为回复没有增加价值,你仍然可以删除这个问题。