gpt4 book ai didi

在 Vim 中使用快速修复列表进行搜索和替换

转载 作者:行者123 更新时间:2023-12-02 19:24:33 26 4
gpt4 key购买 nike

到目前为止,我总是使用 EasyGrep 来替换多个文件中的文本。不幸的是,当项目变大时,它会变得相当慢。看起来快得惊人的一件事是 fugitive.vim 的 Ggrep,它只搜索我的版本控制文件。所有结果也存储在快速修复列表中。

如何使用 Ggrep 的结果对所有找到的文件进行简单替换?是否可以在快速修复列表中的所有文件上使用 %s/foo/bar/cg 或者是否有更好的方法?

最佳答案

更新:Vim 现在有 cdo,请参阅 Sid's answer .

原始答案:

Vim 有 bufdo , windo , tabdoargdo ,它允许您在参数列表中的所有打开的缓冲区、窗口或文件中执行相同的命令。我们真正需要的是像 quickfixdo 这样的东西,它将对快速修复列表中的每个文件调用一个命令。遗憾的是,Vim 缺乏该功能,但是 here's a solution通过 Al它提供了一个家庭滚动的解决方案。使用它,可以运行:

:QFDo %s/foo/bar/gc

这将在快速修复列表中的所有文件上运行 foo/bar 替换。

bufdowindotabdoargdo 命令有一些共同的行为。例如,如果当前文件无法被放弃,那么所有这些命令都将失败。我不确定上面引用的 QFDo 命令是否遵循相同的约定。

我已经适应了Al's solution创建一个名为 Qargs 的命令。运行此命令将使用快速修复列表中列出的所有文件填充参数列表:

command! -nargs=0 -bar Qargs execute 'args ' . QuickfixFilenames()
function! QuickfixFilenames()
" Building a hash ensures we get each buffer only once
let buffer_numbers = {}
for quickfix_item in getqflist()
let buffer_numbers[quickfix_item['bufnr']] = bufname(quickfix_item['bufnr'])
endfor
return join(values(buffer_numbers))
endfunction

使用此功能,您可以按照以下步骤进行项目范围内的搜索和替换:

:Ggrep findme
:Qargs
:argdo %s/findme/replacement/gc
:argdo update

编辑:(向 Peter Rincker 致敬)

或者您可以将最后 3 个命令连接在一行中:

:Ggrep findme
:Qargs | argdo %s/findme/replacement/gc | update

关于在 Vim 中使用快速修复列表进行搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686206/

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