在vim中从grep中选择生成的文件

时间:2009-08-05 16:39:36

标签: vim grep

在vim中使用:grep运行grep搜索后,我得到了一个文件列表。有没有办法选择其中一个文件并在该特定行的新标签中打开它?

4 个答案:

答案 0 :(得分:12)

为了完整性,以及:copen命令,还有:cw,只有在有条目时才会打开“quickfix”窗口(所以如果你的grep没有结果,它就赢了'出现)。

我认为在新标签中打开文件的最简单方法(无需定义映射)将是:

:cw                " Open the quickfix window
Ctrl-W T           " Switch the window into a new tab
<ENTER>            " Open the file/line

或者,您可以这样做:

:cw                " Open the quick fix window
Ctrl-W <ENTER>     " Open the file/line in a new window
Ctrl-W T           " Move the new window to a new tab

如果你想在默认情况下这样做,你可以使用BufEnterBufLeave autocmds在进入和离开quickfix窗口时创建和删除映射;然而,这可能并非无足轻重。

:help :cw
:help :copen
:help quickfix

答案 1 :(得分:11)

为了达到你想要的效果,你必须在调用grep:

后打开quickfix / error窗口
:copen

我每次使用grep时都有一个脚本供我使用。

答案 2 :(得分:1)

如果您获得了一个文件列表,您可以通过

以树状方式浏览它们
:cn
:colder

了解更多信息

:help grep

并滚动到条目的底部

答案 3 :(得分:1)

我找到了这个线索寻找一个非常相似的问题的答案。上面给出的答案虽然正确但未能描述一种方便的方法,可以立即将QuickFix窗口中的所有文件打开到缓冲区或标签中。

似乎没有一个内置的命令来做它,但它作为一个VIM插件是微不足道的...有人在这里做了 http://pastebin.com/J9RwciFQ

这是12行代码(一个函数)...粘贴在这里是为了在分析过程中为您节省点击。如果你打算尝试实现这个,请遵循pastebin链接...我的插件安装在病原体目录中,我稍微修改了原始插件(代码后的详细信息)。

~/.v/b/v/p/quickfixopenall.vim
" Create command
command! QuickFixOpenAll :call StartQuickFixOpenAll()

function!  StartQuickFixOpenAll()
    if empty(getqflist())
        return
    endif
    let s:prev_val = ""
    for d in getqflist()
        let s:curr_val = bufname(d.bufnr)
        if (s:curr_val != s:prev_val)
            exec "edit " . s:curr_val
        endif
        let s:prev_val = s:curr_val
    endfor
endfunction

所以一旦我有一个grep结果我很满意...插件有一个函数:QuickFixOpenAll ...我不得不修改插件给定(将以下行添加到quickfixplugin.vim)。我重命名了他的给定函数StartQuickFixOpenAll ...

 " Create command
 command! QuickFixOpenAll :call StartQuickFixOpenAll()

然后你将grep结果中的所有文件作为缓冲区打开...如果你想运行任何一个例如find / replace的例子,你可以在常规命令前加上“bufdo”命令,它将执行你的命令所有...在VIM类型“help bufdo”

如果你想使用标签,你可以相当简单地修改这个插件......它使用已编辑的“编辑”...只需用“tabe”替换它:和QuickFixOpenAll将在新标签中打开每个结果缓冲区。 / p>