2009-08-05 99 views

回答

11

爲了實現你想要的,你必須在調用grep後打開quickfix/error窗口:

:copen 

我有一個腳本,它使我每次使用grep。

+1

如何讓文件在特定行的新選項卡中打開? – Amjith 2009-08-05 19:27:23

1

如果你得到的文件列表,你可以通過

:cn 
:colder 

在樹狀方式瀏覽他們的詳細信息

:help grep 

並滾動到條目底部

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

我來到這個線程尋找一個非常類似的問題的答案。上面提供的答案雖然正確,但未能描述一種便捷的方式,可以將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的結果中的所有文件打開爲緩衝區...如果你想運行任何commeon操作,如查找/替換你可以前綴用「bufdo」命令定期執行命令,它將執行所有命令...在VIM類型「幫助bufdo」

如果你要使用標籤......它使用逗號「編輯」...只需用「tabe」替換它,並且:QuickFixOpenAll將打開每個結果緩存在一個新的選項卡中。