如何在vimgrep之后在vim中打开多个文件

如何在vimgrep之后在vim中打开多个文件,vim,vimgrep,Vim,Vimgrep,我正在使用gvim。在当前目录上使用vimgrep查找*.sql文件中的文本。当它搜索文件时,一次只显示文件名,最后打开一个文件 是否可以将所有文件作为选项卡打开?基本上,我想打开所有文件,因为我想用其他文本替换“vimgrepled”模式 发现这个插件在这方面非常有用 为了自动化快速修复列表位置上的操作,我编写了一个命令 类似于为每个项目执行命令的:bufdo或:windo command! -nargs=+ Qfixdo call QuickFixDo(<q-args>) fun

我正在使用gvim。在当前目录上使用
vimgrep
查找
*.sql
文件中的文本。当它搜索文件时,一次只显示文件名,最后打开一个文件


是否可以将所有文件作为选项卡打开?基本上,我想打开所有文件,因为我想用其他文本替换“vimgrepled”模式

发现这个插件在这方面非常有用


为了自动化快速修复列表位置上的操作,我编写了一个命令 类似于为每个项目执行命令的
:bufdo
:windo

command! -nargs=+ Qfixdo call QuickFixDo(<q-args>)
function! QuickFixDo(cmd)
    let bufnam = {}
    for q in getqflist()
        let bufnam[q.bufnr] = bufname(q.bufnr)
    endfor  
    for n in keys(bufnam)
        exe 'buffer' n
        exe a:cmd
        update
    endfor
endfunction
此外,可以以相同的方式重复替换本身

:Qfixdo %s/pattern/string/

这有点难,因为快速修复列表存储位置,而不仅仅是文件。那么我应该只搜索并替换多个文件吗?忘记打开它们。我仍然需要一个受影响的文件名列表。您可以使用
:cw
在窗口中打开列表,然后提取文件名。我喜欢这个解决方案,但请。@nelstrom:Wow!有趣的是,我们可以看到,用Vim方式思考如何能够为类似的问题提供几乎相同的解决方案。尽管如此,我自己提出了这个函数,所以这个特定答案的功劳不是由于Al,尽管代码确实非常相似。@ib我很抱歉。考虑到Vim有
bufdo
windo
tabdo
argdo
@nelstrom,Vim没有内置某种quickfixdo似乎很愚蠢:别提它。完全同意没有用于在快速修复列表文件上重复命令的内置命令。事实上,这正是Vim用户一遍又一遍地重新发明它的原因。@nelstrom:顺便说一句,在搜索堆栈溢出的类似解决方案时(阅读您的评论后),我发现了将
args
设置到快速修复列表文件并使用
argdo
的方法。这是一个非常优雅的解决方法!
:Qfixdo %s/pattern/string/