【问题标题】:how to open multiple files in vim after vimgrepvimgrep后如何在vim中打开多个文件
【发布时间】:2010-12-22 07:08:07
【问题描述】:

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

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

【问题讨论】:

  • 这有点难,因为 quickfix 列表存储位置,而不仅仅是文件。
  • 所以我应该只搜索和替换多个文件吗?忘记打开它们..
  • 我仍然需要一份受影响的文件名列表..
  • 您可以使用:cw 在窗口中打开列表,然后提取文件名。

标签: vim vimgrep


【解决方案1】:

为了自动对 QuickFix 列表位置执行操作,我编写了一个命令 类似于 :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

使用该功能可以打开 QuickFix 列表中提到的所有文件 以下命令。

:Qfixdo tab sp

此外,可以以相同的方式重复替换本身。

:Qfixdo %s/pattern/string/

【讨论】:

  • 我喜欢这个解决方案,但请give credit where due
  • @nelstrom:哇!有趣的是,Vim 的思维方式可以为类似问题产生几乎相同的解决方案。尽管如此,我自己想出了这个函数,所以这个特定答案的功劳不是由于 Al,即使代码确实非常相似。
  • @ib 我很抱歉。考虑到 Vim 有 bufdowindotabdoargdo,Vim 没有内置某种 quickfixdo 似乎很愚蠢。
  • @nelstrom:别提了。完全同意缺少用于在 QuickFix 列表文件上重复命令的内置命令。事实上,这正是 Vim 用户反复改造它的原因。
  • @nelstrom:顺便说一句,在 Stack Overflow 上搜索类似的解决方案(阅读您的评论后),我发现 your ideaargs 设置为 QuickFix 列表文件并使用 argdo。这是一个非常优雅的解决方法!
【解决方案2】:

发现这个插件在这方面很有帮助。

http://www.vim.org/scripts/script.php?script_id=1813

【讨论】:

    猜你喜欢
    • 2014-07-04
    • 2017-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多