2010-01-31 31 views
9

我在~/src。我可以做git grep _pattern_並獲得與此模式匹配的所有*.cpp*.hpp文件的列表。在Vim中打開所有符合特定模式的文件

現在我想瀏覽所有與模式相匹配的文件,並對它們進行編輯。我如何在Vim中做到這一點? (基本上,我想Vim通過我的目錄一樣的git grep的那樣,並跳到我正確的文件。)

+1

似乎是多餘的有:http://stackoverflow.com/questions/1716470/can-you-mass-edit-all-files-returned-in-a- grep和http://stackoverflow.com/questions/1095314/fast-find-in-files-for-vim – 2010-02-01 18:19:34

+0

相關:http://stackoverflow.com/questions/3468763/how-do-i-make-vim-打開所有文件匹配模式在不同標籤 – 2017-01-01 15:46:57

回答

12

您可以使用單引號(也是UNIX外殼功能),這樣的:

vim `git grep --name-only <your expression>` 
+11

大多數人稱他們爲反引號;) – matpie 2010-02-01 18:10:20

+7

同意,這真是嚴重誤用術語。 – 2010-02-11 23:52:13

+5

+1僅用於'單引號'。 – 2012-03-22 17:14:10

8

在bash中,你可以做

vim $(grep -l _pattern_ *.cpp *.hpp) 

但是這是一個bash的功能,而不是vim功能。

+0

謝謝。我正在尋找這個。 :) – 2016-12-10 18:22:02

2

你可能設置grepprg和grepformat選項來運行git grep...和解釋結果。然後,您可以運行命令:grep並將結果讀入quickfix緩衝區 - 有關更多信息,請參閱:h quickfix。然後你可以通過cnext和:cprev,或者:copen單步執行它們,以便用文件列表打開一個單獨的窗口 - 將光標放在文件名上並按下回車鍵將打開該文件進行編輯。

這個優於Zoran和ammoQ的建議是,它不會將文件讀入內存,直到您想要編輯它們。他們的建議會將數百個文件一次加載到內存中,並且可能成爲管理的噩夢。它也是跨平臺的,所以應該在Windows上工作,而不必使用第三方shell(如cygwin bash)。

4

可以使用ARGS ex命令:

:args *.cpp *.hpp 

這會在當前目錄下打開所有的CPP和HPP文件。

您可以使用任何文件路徑擴展:grep。

1

通過正確使用quickfix列表,您甚至可以立即轉到正確的行(使用:help quickfix命令,例如:cn:cw)。所以,如果你使用bash或zsh中:

 
vim -q <(git grep foo) 
相關問題