Selecting resulting files from grep in vim

前端 未结 4 1790
轻奢々
轻奢々 2021-02-02 01:21

After I run a grep search in vim with :grep, I get a list of files. Is there a way to select one of those files and open it in a new tab at that particular line?

4条回答
  •  迷失自我
    2021-02-02 02:06

    I came upon this thread looking for an answer to a very similar question. The answer presented above, though correct, failed to describe a convenient way to open ALL the files in the QuickFix window at once ... into either buffers or tabs.

    There doesn't seem to be a built in command to do it, but it's trivial as a VIM plugin ... somebody has done it here http://pastebin.com/J9RwciFQ

    It's 12 lines of code (one function) ... pasted here to save you a click during your analysis. Do follow the pastebin link if you are going to try to implement this though ... my plugin is installed in pathogen directory and I modified the plugin from the original slightly (details after code).

    ~/.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
    

    So once I have a grep result I'm satisfied with ... the plugin has a function :QuickFixOpenAll ... I had to modify the plugin as given (added the following line to the quickfixplugin.vim). And I renamed his given function StartQuickFixOpenAll ...

     " Create command
     command! QuickFixOpenAll :call StartQuickFixOpenAll()
    

    Then you have all the files in the grep result open as buffers ... if you want to run any commeon operations such as find/replace you can prefix the regular command with the "bufdo" command which will perform your command in all ... in VIM type "help bufdo"

    You can fairly trivially modify this plugin if you wan to use tabs ... it uses the commaned "edit" ... just replace that with "tabe" and :QuickFixOpenAll will open each result buffer in a new tab.

提交回复
热议问题